「内部」(ローカル)クラスのメソッドから「外部」クラスの属性にアクセスしようとしていますが、失敗します。これはローカルクラスメソッドから属性にアクセスしようとするとコンパイルエラーが発生する
class outer
{
public:
std::string name;
class inner
{
public:
void hello();
};
void dostuff();
};
void outer::inner::hello(){std::cout << "Hello " << name << "\n";}
void outer::dostuff(){inner instanceInner; instanceInner.hello();}
int main()
{
outer instanceOuter;
instanceOuter.name = std::string("Alice");
instanceOuter.dostuff();
return 0;
}
コンパイルエラーコンパイルに失敗し
:
9:21: error: invalid use of non-static data member 'outer::name'
21:53: error: from this location
を私は本当にname
は静的メンバになりたくないが、私は本当に私の特定の目的のためにと気にしないouter
シングルトンです。だから私はstatic std::string name;
で試してみました
コンパイルエラーだ:
/tmp/ccqVKxC4.o: In function `outer::inner::hello()':
:(.text+0x4b): undefined reference to `outer::name'
/tmp/ccqVKxC4.o: In function `main':
:(.text.startup+0x1f): undefined reference to `outer::name'
collect2: error: ld returned 1 exit status
をあなたは私を助けることはできますか?
あなたの答えをありがとう。私はあなたの "こんにちは"と私の間に違いは見られません( 'void outer :: inner :: hello(){std :: cout <<" "Hello" << name << "\ n";} ')。私が誤解していることはありますか? –
私はちょうどあなたがエラーがどこにあったのか、なぜそれが起こっていたのかを指摘していました。私の編集を確認すると、この@ Remi.bを管理するための提案が表示されます。 – 0xDEFACED
関数に 'name'を渡すことができます。私はそれを渡さないようにしています。その理由は、私は比較的長いコード(〜1000行)を持っており、私はちょうど外側のクラスで思考全体をラップしています。私は外部クラスのすべての属性をすべての関数呼び出しに渡す必要はありません。すべての引数を引数として渡すと、最終的に小さな関数が繰り返し呼び出されるため、パフォーマンスが低下する可能性があることに注意してください。最終的には(外部クラスのインスタンスを介して各属性を呼び出さない限り)別の方法で行うことは不可能かもしれません。 –