我正在尝试用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
我在这里做错了什么?
答案 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