文件包含错误(C++):对______的未定义引用

thk*_*hko 7 c++ header include

每当我编译#includes一个用户定义的类的东西时,我得到的总是这样的编译错误: main.cpp: undefined reference to Complex::Complex(double, double)

我已经将问题简化为一组三个极其简单的文件:main.cpp,例如Complex.h和Complex.cpp.我仍然得到未定义的引用错误.我正在开发Windows上的Code :: Blocks,但我在Ubuntu中使用g ++也得到了同样的东西.为什么会这样?我尝试在Code :: Blocks中的main.cpp之前构建Complex.cpp,并且我尝试了g++ main.cpp Complex.cpp尽可能多的尝试g++ main.cpp.每次都有相同的错误.

/*======== main.cpp ========*/
#include "Complex.h"

int main()
{
    Complex A(1.0, 1.0);
    return 0;
}

/*======== Complex.h ========*/
#ifndef _COMPLEX_H
#define _COMPLEX_H

class Complex
{
    public:
    double x, y;
    Complex(double real, double imag);
};

#endif

/*======== Complex.cpp ========*/
#include "Complex.h"

Complex::Complex(double real, double imag)
{
    x = real;
    y = imag;
}
Run Code Online (Sandbox Code Playgroud)

ed:现在我得到了不同的错误,所以我必须做一些完全错误的事情.使用与上面相同的代码,我得到:

main.cpp: in function 'int main()':
main.cpp:5:5: error: 'Complex' was not declared in this scope
main.cpp:5:13: error: expected ';' before 'A'
Run Code Online (Sandbox Code Playgroud)

这很奇怪.当我在.cpp文件中使用类时,一切都工作得很早,但这是"不好的做法"所以我将类定义移动到.h文件并将实现保存在.cpp文件中,现在没有任何作用.

Car*_*rum 7

这不是编译错误,而是链接错误.您需要确保将所有对象链接在一起.您可以通过以下几种方式实现这一目标:

g++ main.cpp Complex.cpp
Run Code Online (Sandbox Code Playgroud)

应该工作正常(当我尝试你的例子时,这里做到了).您也可以分步进行:

g++ -c main.cpp
g++ -c Complex.cpp
g++ main.o Complex.o
Run Code Online (Sandbox Code Playgroud)