C++ 类初始化器错误-C++;

C++ 类初始化器错误-C++;,c++,class,initialization,C++,Class,Initialization,我试图在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.i

我试图在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;
}

我做错了什么?

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

编译main.cpp时只需运行以下g++命令(假设您使用的是gcc):


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

编译main.cpp时只需运行以下g++命令(假设您使用的是gcc):


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

将其添加到项目中的
.cpp
文件中,该文件包含头文件
complexx.h
(可能是
complexx.cpp
):


double module()
也可能存在同样的问题,因为您尚未调用链接器,所以不会发出链接器错误。

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

将其添加到项目中的
.cpp
文件中,该文件包含头文件
complexx.h
(可能是
complexx.cpp
):

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

问题就在这里

complex(double realPart, double imaginaryPart);
您已经声明了一个构造函数,但尚未定义它。这就是为什么链接器抱怨
未定义的符号complex::complex(double,double)

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

complex(double realPart, double imaginaryPart)
  : realPart(realPart)
  , imaginaryPart(imaginaryPart)
{ }
这些参数的名称并不重要。C++不会推断出它们与成员变量的名称相同,它们应该被复制到对象。

问题在这里。
complex(double realPart, double imaginaryPart);
complex(double realPart, double imaginaryPart)
  : realPart(realPart)
  , imaginaryPart(imaginaryPart)
{ }
您已经声明了一个构造函数,但尚未定义它。这就是为什么链接器抱怨
未定义的符号complex::complex(double,double)

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

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

这些参数的名称并不重要。C++不会推断出它们与成员变量的名称相同,它们应该被复制到对象。

定义在哪里?你的实现在哪里?你在构建它并链接它吗?你没有定义构造函数。实际上-定义在哪里?你的实现在哪里?你在构建和链接它吗?你没有定义构造函数。实际上-
complex(double realPart, double imaginaryPart)
  : realPart(realPart)
  , imaginaryPart(imaginaryPart)
{ }