C++ 相談室 part5
■ このスレッドは過去ログ倉庫に格納されています
0439デフォルトの名無しさん
NGNGclass A {
class B {
int *ptr;
public:
B(int *p) : ptr(p) {}
int& bar() { return ptr[1]; }
int bar() const { return ptr[1]; }
} ;
int x[3];
public:
A() { x[0] = 7; x[1] = 8; x[2] = 9; }
B foo() { return B(x); }
B foo() const { return B(x); }
} ;
void hoge(const int v) { printf("%d\n", v); }
void fuga(const A& a) { hoge(a.foo().bar()); }
int main() {
A a;
fuga(a);
return 0;
}
このソースを g++ 2.95.2 でコンパイルすると
>test2.cc:15: passing `const int *' as argument 1 of `A::B::B(int *)'
>discards qualifiers
とエラーが出ます. この場合どういう風にコードを書きなおすのが,
いいのでしょうか ? ちなみに, class B のコンストラクタ, メンバ ptr の
const 版を追加したバージョンも試したのですが, bar() だけ const じゃない
ものが呼び出されてしうので, うまくいきませんでした.
そういうものなのでしょうか ?
■ このスレッドは過去ログ倉庫に格納されています