未定义引用struct :: struct是什么意思?

时间:2019-11-03 18:14:04

标签: c++

所以我有一些.cc和.h文件。

// Class.cc
#include "Class.h"
Class::Class(){
    this->x = 1;
    this->y = new HelpingClass[1];
    y[0] = HelpingObject{};  // Calls the HelpingObject's default ctor
}

这是我的主要.cc文件,其中为我的Class创建了一个构造函数,该构造函数在Class.h文件中定义:

// Class.h
#include "HelpingClass.h"
struct Class{
    HelpingObject * y; // heap allocated array of HelpingObject
    int x;     // size of allocated array
    Class(); // The constructor
    ...
}

此“ HelpingObject”包含在我的HelpingClass.h中,并且在VScode文件中也包含有效的HelpingClass.cc(我知道HelpingClass的实现已经很好,所以我省略了HelpingClass.cc):

// HelpingClass.h
struct HelpingObject {
  int a;
  int b;
  HelpingObject(int a = 0, int b = 10);
}
// Doesn't really matter what this object is, but my "Class" has a field
// which is a heap allocated array of these objects

问题是,我得到一个错误,提示“ Class.cc:(.text+0x43):对“ HelpingObject :: HelpingObject(int,int)”的未定义引用 collect2.exe:错误:ld返回1退出状态”

这是什么?如果有帮助,我正在使用VSCode,但是即使我用Linux中所有这些文件的可执行文件制作了一个Makefile,也遇到相同的错误。请帮助

edit:为了方便起见,我将实际代码的名称更改为这些通用名称,但在将其复制到此处哈哈时感到一团糟。语法在我的代码中都是正确的,我的实现不是'

2 个答案:

答案 0 :(得分:0)

您在这里犯了一些错误。

  1. Class:Class需要一个冒号;现在,它是一个goto标签,后面是缺少返回类型的自由函数的定义。解析器不知道该怎么办。
  2. 您已将HelpingClass的构造函数命名为{。{1}}。应该是Rational

这些错误使您的工具链更加混乱,无法找到您的任何构造函数定义!

此外,您应该避免手动进行内存管理。没必要。给自己一个漂亮的矢量或unique_ptr。

答案 1 :(得分:0)

您必须在每个类声明的末尾添加分号。

例如,

struct Class
{
    ...
}

应该是

struct Class
{
    ...
};

此外,您还必须提供HelpingObject::HelpingObject(int a, int b)

的实现