为什么我收到链接器错误?

时间:2011-04-22 21:49:06

标签: c++ class

我收到错误:“对'yClass :: yClass()'

的未定义引用

尝试在main中创建类的实例时。谁知道为什么?

标题

#ifndef header_h
#define header_h

#include <cstdlib>
#include <iostream>
using namespace std;

class yClass
{
      public:
             void one();
             void two(int,int);
             yClass();

      private:
              int a;
              int b;
};

#endif

主要

#include "header.h"

int main()
{
    yClass a;

    system("PAUSE");
    return EXIT_SUCCESS;
}

3 个答案:

答案 0 :(得分:8)

您已声明了yClass的构造函数,但未对​​其进行定义。或者,如果您已在另一个文件中定义它(即对应于“header.h”的.cpp文件),那么您还没有与之链接。

初始化main中的对象时使用构造函数,因此必须存在其定义。相反,“一”和“两”方法从不被调用,因此实际上并不需要对它们进行定义。

从未定义构造函数的简单修复是在类定义中定义它:

struct yClass {
    yClass() : a(), b() {}

private:
    int a, b;
};

如果问题是您已定义构造函数但未与定义链接,则需要将其他转换单元(“.cpp文件”)添加到makefile,项目,命令行等。

答案 1 :(得分:1)

因为您声明了构造函数(以及yClass的其他函数),但没有实现它们。

答案 2 :(得分:0)

你在哪里实际定义了yClass?除非你 #include "yclass.cpp
或者在包含yclass的库中链接,只包括标题是不够的。