类初始化器错误 - C++
问题描述:
我试图创建一个类在C++复数的,但我发现这里的类初始化器一个奇怪的错误是错误的截图:类初始化器错误 - C++
这里是我的代码:
main.cpp中:
#include <iostream>
#include "cmath"
#include "Complexx.h"
int main(int argc, const char * argv[])
{
complex c(1,1);
std::cout << c.realPart << "+" <<c.imaginaryPart << "i";
return 0;
}
Complexx.h:
#ifndef Functions_Complexx_h
#define Functions_Complexx_h
#include "cmath"
using namespace std;
class complex {
public:
double imaginaryPart;
double realPart;
complex(double realPart, double imaginaryPart);
double modulus();
};
#endif
我在这里做错了什么?
答
您还没有提供针对complex(double, double)
构造函数的定义,但提供的声明。这是链接器所抱怨的。
这个添加到.cpp
文件在您的项目,该项目#include
是你的头文件complexx.h
(可能complexx.cpp
):
complex::complex(double realPart, double imaginaryPart)
:
realPart(realPart),
imaginaryPart(imaginaryPart)
{ }
这是可能的存在double modulus()
,不会发出链接错误针对同样的问题因为你还没有调用它。
答
看来你还没有链接complex(double, double)
构造函数的定义。 这可能是由于您忘记链接Complexx.cpp
(假设cpp文件的名称与头文件相同)或您完全忘记在链接的Complexx.cpp
文件中定义构造函数所致。
只要运行该G功能编译main.cpp中时(假设你正在使用gcc)++命令:
g++ -c Complexx.cpp -o Complexx.o
g++ -c main.cpp -o main.o
g++ main.o Complexx.o -o app
答
问题在这里。
complex(double realPart, double imaginaryPart);
你宣布一个构造函数,但你没有定义它。这就是为什么链接器抱怨undefined symbol complex::complex(double, double)
这可能是定义你想 - 将这两个参数存储在对象中。
complex(double realPart, double imaginaryPart)
: realPart(realPart)
, imaginaryPart(imaginaryPart)
{ }
这些参数被命名的并不重要。 C++不会推断这是因为它们与您的成员变量具有相同的名称,因此它们应该被复制到对象中。
定义在哪里? – 2013-03-21 15:44:48
您的实施在哪里?你在建设并连接它吗? – juanchopanza 2013-03-21 15:45:11
您没有定义构造函数。 – 2013-03-21 15:45:18