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文件中,现在没有任何作用.
这不是编译错误,而是链接错误.您需要确保将所有对象链接在一起.您可以通过以下几种方式实现这一目标:
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)
| 归档时间: |
|
| 查看次数: |
17199 次 |
| 最近记录: |