1

事前定義された値でマップを作成し、それを他の方法でさらに処理するために渡そうとした次のメインファイルがあります。メインファイルは次のとおりです。

int main(){
  map<id,Porto> _portoInit;

  id = 1;

  Porto p;
  p.val = 5;

  _portoInit.insert(pair<id, Porto>(id, p));

  Porto::setPorto(_portoInit);

  return 1;
}

setPorto はクラスの下で次のように定義されます (別のファイルで)

void Porto::setPorto( const map<id,Porto>&  _portoblock ) {
   //do stuffs
};

「error: cannot call member function ... without object」というエラーが出てしまいました _portoInit のオブジェクトをメインファイルで既に宣言していませんか、それとも宣言の仕方が間違っていますか?

4

3 に答える 3

2

実際のオブジェクトを介してメソッドを呼び出す必要があります。

p.setPorto(_portoInit);

setPortoがメソッドでない限りstatic、コードは無効です。

于 2013-05-02T15:11:54.290 に答える
1

setPortoは非静的メンバー関数であるため、インスタンスで呼び出す必要がありPortoます。例えば:

p.setPorto(_portoInit);

非静的メンバー関数は、(おそらく cv 修飾された) 型 T* の暗黙的な最初のパラメーターを取ることに注意してください。したがって、次のように呼び出すことができます。

Porto::setPorto(&p, _portoInit);

どちらの場合も、メンバー関数を呼び出すオブジェクトが必要です。これは、コンパイラがあなたに言っていることです。

于 2013-05-02T15:12:02.770 に答える
1

あなたは書くべきです

p.setPorto(_portoInit);

「::」は関数のスコープを定義し、関数が呼び出されているオブジェクトは Porto であるため、上記では暗黙的です。

于 2013-05-02T15:12:28.080 に答える