我想一個臨時對象(的std :: string爲例)傳遞給我的對象的構造函數:標準構造通行證臨時對象
class MyClass{
public:
MyClass(string a):
a(a)
{
}
string a;
};
int main(int argc, char *argv[]){
MyClass a(string());
cout<<a.a<<endl;
return 0;
}
但我收到此錯誤:
main.cpp: In function ‘int main(int, char**)’:
main.cpp:28:11: error: request for member ‘a’ in ‘a’, which is of non-class type ‘MyClass(std::string (*)()) {aka MyClass(std::basic_string<char> (*)())}’
如果我將任何東西傳遞給臨時對象的構造函數(例如string(「」)),那麼一切正常。爲什麼?
這就是說:「編譯器將'MyClass a(string())'解釋爲名爲'a'的函數的原型,返回'MyClass'並將未命名的'string'作爲參數。這是不正確的。它應該說編譯器將它解釋爲一個名爲'a'的函數的原型,它返回一個'MyClass'並將帶有'string'返回值*的*函數作爲其唯一(未命名)參數。 – 2015-01-15 03:30:25