我有一个在hpp文件中定义的类,我试图在另一个头文件中使用,所以我向它做了一个前向声明(我只想通过引用将它用作函数参数)。由于某种原因,我不断收到编译错误。我无法弄清楚它为什么不起作用。这是我的代码:
//something.hpp:
class MyClass;
void someFunction (MyClass& mc);
...
//something.cpp:
#include "MyClass.hpp"
void someFunction (MyClass& mc) {...}
...
//MyClass.hpp:
class MyClass {
const char* myText;
public:
MyClass (const char* text) : myText(text) {}
};
//main.cpp:
int main () {
...
someFunction (MyClass ("some text here"));
...
}
我从main()收到一个错误,上面写着:
'<function-style-cast>' : cannot convert from 'const char [15]' to 'MyClass'
Source or target has incomplete type
如果我理解正确,这意味着编译器找不到MyClass的定义,只是它的预定义(即使我在something.cpp中包含了MyClass.hpp),这就是为什么它说它不完整。我在这里想念的是什么?
答案 0 :(得分:3)
功能
void someFunction (MyClass& mc);
正在接受对MyClass
实例的非const引用。
您不能将临时文件传递给此类函数。
代码应为
#include "MyClass.hpp"
...
int main() {
MyClass m("some text here");
someFunction(m);
}
或者您需要接受const引用。
void someFunction (const MyClass& mc);
答案 1 :(得分:2)
我不认为问题与前向声明有关,而是你不能将临时函数传递给以参考为参数的函数。实际上,如果将所有定义放在一个文件中,它仍然无法编译。另一方面,如果用以下代码替换main的代码,它将编译:
int main() {
MyClass mc("Some text here");
someFunction(mc);
}