-1

次の形式のヘッダーファイルClass2.hppに関数があります。

class Class2{
void Test::func(std:: string & text, Class1::enum_var var1, unsigned var2, unsigned     &var3);};

私は次の形式のClass1を持っています:

  class Class1{
  public:
 /// Different literal types
  enum enum_var {
  enum_var1, enum_var2, enum_var3
 }; };

Class2.cppで上記の関数を次のように定義しました

 void Test::func(std:: string & text, Class1::enum_var var1, unsigned var2, unsigned     &var3){
 cout<<"inside the function";
 }

今、私は上記の関数を次のように呼び出しています:

Class2 clsObj;
std::string text="abc";
int var3=0;
clsObj.func( text, Class1::enum_var1, 0, &var3);

ただし、プログラムを実行していると、次のエラーが発生します。

 error: no matching function for call to ‘Class2::func(std::string*,   Class1::enum_var1,  int, int*)’
 note: candidate is:
 void Class2::func(std::string&, Type::ID, unsigned int, unsigned int&)
 note:  no known conversion for argument 4 from ‘unsigned int*’ to ‘unsigned int&’

エラーを取り除く方法がわかりません。誰かが親切にしてください。

また、var3での変更を反映させたいので、参照で返すか渡す以外に選択肢はありません。var3を参照で渡すと、エラーが発生します。

4

2 に答える 2

2

参照による受け渡しには、呼び出し側に特別な構文はなく、署名/定義にのみ特別ながあり&ます。使用する:

clsObj.func(text, Class1::enum_var1, 0, var3);

&texttext変数のアドレスを取得します(タイプはstd::string*)。それを関数に渡そうとすると、ポインターを期待していません。それがまさにエラーメッセージが伝えようとしていることです。

于 2012-06-07T03:15:38.743 に答える
2
clsObj.func(& text, Class1::enum_var1, 0 &var3);

する必要があります:

clsObj.func(text, Class1::enum_var1, 0, var3);

参照は参照されているオブジェクトのエイリアスであり、参照名だけで参照にアクセスできます。

于 2012-06-07T03:15:41.663 に答える