以下代码编译并运行完美,
#include <iostream>
class sam {
public:
void func1();
int func2();
};
int main() {
sam s;
}
是否因缺少类成员定义而产生错误?
答案 0 :(得分:8)
如果不调用成员函数,则不必定义它们。即使你调用它们,编译器也不会抱怨,因为它们可以在其他编译单元中定义。只有链接器才会抱怨。不定义函数是被接受和共同的,以强制出现意外行为的错误(例如,用于防止复制)。
答案 1 :(得分:4)
是的,如果没有使用类成员函数,则完全有效。对于非成员函数也是如此。但是,虚拟功能需要定义。但是,如果不使用纯虚拟,则可以省略定义。
“已使用”,顺便说一句,不包括引用sizeof
中的功能。换句话说,这仍然有效:
sizeof (s.func2()); // still not used!
答案 2 :(得分:2)
您可以在别处定义它(如另一个文件)
void Sam::func1()
{
// do stuff here
}
答案 3 :(得分:1)
来自MSDN Linker Error LNK2019
答案 4 :(得分:0)
你确定了声明了它。你只是没有添加实现提供了一个函数原型。如果您没有函数定义,链接器可能会显示警告(例如,Borland C ++ Builder 5没有)。