我正在尝试学习如何在C ++中创建类,其中我使用头文件,包含类函数定义的.cpp文件和主.cpp文件。这是我的(取自一个例子)
class MyClass
{
public:
void foo();
int bar;
};
在class.cpp中
#include "class.h"
using namespace std;
void MyClass::foo()
{
cout<< "test";
}
在main.cpp
中#include "class.h"
using namespace std;
int main()
{
MyClass a;
a.foo();
return 0;
}
编译main.cpp导致此错误: [链接器错误] C:\ :(。text + 0x16):未定义引用`MyClass :: foo()' collect2:ld返回1退出状态
我是否需要编译class.cpp或class.h?我错过了将class.h与class.cpp联系起来的方法吗?如果是这样,我如何链接它们?
答案 0 :(得分:2)
您需要将实现文件编译为目标文件并将它们链接在一起。以下是您使用g++
时的示例:
g++ -c class.cpp -o class.o
g++ -c main.cpp -o main.o
g++ class.o main.o -o main
./main
实际上,您会添加更多选项,例如-std=c++11 -O3 -Wall -Wextra -Werror
等。
答案 1 :(得分:1)
您可以使用g++
编译创建名为main.cpp
和class.cpp
main.o
和class.o
的对象文件
g++ -c class.cpp
g++ -c main.cpp
关联目标代码main.o
和class.o
以创建名为program
的可执行文件
g++ -o program main.o class.o
然后运行program
可执行文件
./program
答案 2 :(得分:0)
您可能只编译main.cpp而不编译class.cpp。
您使用什么命令来生成输出?
这应该可以正常工作:
g++ class.cpp main.cpp -o class
答案 3 :(得分:0)
工作正常 我在编译器中尝试了代码
MyClass.h
#include <iostream>
class MyClass
{
public:
void foo();
int bar;
};
MyClass.cpp
#include "MyClass.h"
using namespace std;
void MyClass::foo()
{
cout<< "test";
}
Main.cpp的
#include <iostream>
#include "MyClass.h"
int main(int argc, const char * argv[])
{
MyClass a;
a.foo();
return 0;
}
我在Xcode中尝试了代码。 它工作得很好。
答案 4 :(得分:0)
在编译.cpp文件时使用编译器选项-I<dir of .h file>
。编译.cpp文件