0

我正在尝试在 C++ 中创建一个复数类,但是对于该类的初始化程序,我遇到了一个奇怪的错误,这是错误的屏幕截图:

在此处输入图像描述

这是我的代码:

主.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;
}

复杂x.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

我在这里做错了什么?

4

3 回答 3

3

问题就在这里。

complex(double realPart, double imaginaryPart);

你已经声明了一个构造函数,但你还没有定义它。这就是链接器抱怨的原因undefined symbol complex::complex(double, double)

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

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

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

于 2013-03-21T15:47:25.797 回答
2

尽管提供了声明,但您尚未提供complex(double, double)构造函数的定义。这就是链接器所抱怨的。

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

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

可能存在相同的问题double modulus(),因为您(还)没有调用它,所以没有发出链接器错误。

于 2013-03-21T15:46:56.963 回答
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
于 2013-03-21T15:46:53.327 回答