C ++类在单独的文件中

时间:2013-10-23 18:40:02

标签: c++ class

我正在尝试学习如何在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联系起来的方法吗?如果是这样,我如何链接它们?

5 个答案:

答案 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++

在Linux shell上尝试此操作

编译创建名为main.cppclass.cpp

main.oclass.o的对象文件
g++ -c class.cpp   

g++ -c main.cpp

关联目标代码main.oclass.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文件