类初始化错误 - C ++

时间:2013-03-21 15:43:48

标签: c++ class initialization

我正在尝试用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

我在这里做错了什么?

3 个答案:

答案 0 :(得分:3)

问题出在这里。

complex(double realPart, double imaginaryPart);

您已声明一个构造函数,但您尚未定义它。这就是链接器抱怨undefined symbol complex::complex(double, double)

的原因

这可能是您想要的定义 - 将这两个参数存储在对象中。

complex(double realPart, double imaginaryPart)
  : realPart(realPart)
  , imaginaryPart(imaginaryPart)
{ }

这些参数的名称无关紧要。 C ++不会推断它,因为它们与你的成员变量具有相同的名称,应该将它们复制到对象中。

答案 1 :(得分:2)

虽然提供了声明,但您没有为complex(double, double)构造函数提供定义。这就是链接器抱怨的内容。

将此添加到项目中的.cpp文件#include您的头文件complexx.h(可能是complexx.cpp):

complex::complex(double realPart, double imaginaryPart)
    :
    realPart(realPart),
    imaginaryPart(imaginaryPart)
{ }

double modulus()可能存在同样的问题,因为您尚未调用它,因此没有发出链接器错误。

答案 2 :(得分:0)

您似乎没有链接complex(double, double)构造函数的定义。 这可能是因为您忘记链接Complexx.cpp(假设cpp文件的名称与头文件相同)或您完全忘记在链接的Complexx.cpp内定义构造函数文件。

在编译main.cpp时运行此g ++命令(假设您使用的是gcc):

g++ -c Complexx.cpp -o Complexx.o
g++ -c main.cpp -o main.o
g++ main.o Complexx.o -o app