我正在使用g ++编译Cygwin中的C++程序,我有一个类,其构造函数没有参数.我有线:
MyClass myObj();
myObj.function1();
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,我收到了消息:
error: request for member 'function1' in 'myObj', which is of non-class type 'MyClass ()()'
Run Code Online (Sandbox Code Playgroud)
经过一番研究,我发现修复是将第一行更改为
MyClass myObj;
Run Code Online (Sandbox Code Playgroud)
我可以发誓我之前用C++中的括号做了空构造函数声明.这可能是我正在使用的编译器的限制,还是语言标准真的说不使用括号用于没有参数的构造函数?
我是一名C++初学者,如果问题太基础,那就很抱歉.
我试图收集字符串constrcturs并尝试所有它们(记住它们).
string strA(); // string(); empty string // incorrect
string strB("Hello"); // string( const char* str)
string strC("Hello",3); // string( const char* str, size_type length)
string strD(2,'c'); // string( size_type lenght, const char &c)
string strE(strB); // string( const string& s)
cout << strA << endl;
cout << strB << endl;
cout << strC << endl;
cout << strD << endl;
cout << strE << endl;
Run Code Online (Sandbox Code Playgroud)
除strA外,所有这些都有效.它打印"1".为什么?在这种情况下,strA的类型是什么?当我不确定时,如何检查东西的类型?
我注意到这是正确的方法(顺便说一句,这似乎与其他构造函数不一致,有时候parens有时没有parens):
string strA;
Run Code Online (Sandbox Code Playgroud)
ps:大胆的问题,通常不相关的答案将被低估.
在处理这个问题时,我发现了一种不一致的行为.
为什么引用绑定在构造函数中与常用函数的行为不同?
struct A {
};
struct B : public A {
B(){}
private:
B(const B&);
};
void f( const B& b ) {}
int main() {
A a( B() ); // works
A const & a2 = B(); // C++0x: works, C++03: fails
f( B() ); // C++0x: works, C++03: fails
}
Run Code Online (Sandbox Code Playgroud)
我已经使用g ++ - 4.1和Comeau 4.2.45.2在严格的C++ 03模式下测试了C++ 03并且禁用了C++ 0x扩展.我得到了相同的结果.
对于C++ 0x,在宽松模式下使用g ++ - 4.4和Comeau 4.3.9进行了测试,并启用了C++ 0x扩展.我得到了相同的结果.