类初始化器错误 - C++

问题描述:

我试图创建一个类在C++复数的,但我发现这里的类初始化器一个奇怪的错误是错误的截图:类初始化器错误 - C++

enter image description here

这里是我的代码:

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 

我在这里做错了什么?

+2

定义在哪里? – 2013-03-21 15:44:48

+0

您的实施在哪里?你在建设并连接它吗? – juanchopanza 2013-03-21 15:45:11

+3

您没有定义构造函数。 – 2013-03-21 15:45:18

您还没有提供针对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++不会推断这是因为它们与您的成员变量具有相同的名称,因此它们应该被复制到对象中。