C ++中的前向声明错误

时间:2015-04-03 08:19:46

标签: c++ compiler-errors forward-declaration

我有一个在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),这就是为什么它说它不完整。我在这里想念的是什么?

2 个答案:

答案 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); 
}