需要结构包含/实现帮助(c ++)

时间:2013-02-24 07:28:00

标签: c++ struct header typedef

我正在尝试为我的mysh.cpp文件中包含和使用的双向链接列表调整一些代码,我正在

error: aggregate ‘linked_list list’ has incomplete type and cannot be defined

编译。 readcommand.cpp编译得很好,所以我只想弄清楚在头文件或cpp文件中需要更改什么才能让它顺利运行mysh。

以下是所用文件的相关部分:

mysh.cpp

#include "readcommand.h"

using namespace std;

int main (int argc, char** argv) {
  readcommand read;
  linked_list list; // THIS is the line that's causing the error

  ...
}

readcommand.h

#ifndef READCOMMAND_H
#define READCOMMAND_H

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cstdlib>

class readcommand {

  public:

  // Struct Definitions
  typedef struct node node_t;
  typedef struct linked_list linked_list_t;

  struct node;
  struct linked_list;

...
};

#endif

readcommand.cpp

#include "readcommand.h"

using namespace std;

struct node {
  const char *word;
  node *prev;
  node *next;
};

struct linked_list {
  node *first;
  node *last;
};

...

我已经有一段时间了,因为我在c ++或一般语言中使用了标题。我已经尝试将有问题的行改为

read.linked_list list;

read.linked_list list = new linked_list;

之类,但它只是将错误更改为

之类的内容
error: ‘class readcommand’ has no member named ‘linked_list’

error: invalid use of ‘struct readcommand::linked_list’

提前致谢。

4 个答案:

答案 0 :(得分:1)

你需要把这些......

struct node {
  const char *word;
  node *prev;
  node *next;
};

struct linked_list {
  node *first;
  node *last;
};

...在class readcommand中使用之前编译器会在之前看到它们的位置。可能最简单的方法是将它们放在 class readcommand之前的readcommand.h 中。问题是nodelinked_list正在class readcommand中使用,但编译器在编译时不知道它们是什么。

答案 1 :(得分:0)

时,需要显示结构/类定义(而不仅仅是声明)
  1. 取消引用指向该struct / class的指针
  2. 创建该struct / class的对象
  3. 编译器需要知道对象的大小及其字段的位置。

    这就是为什么您可能希望将node和linked_list的定义放入.h文件中。 通常,只在成员函数的定义中加入.cpp。

答案 2 :(得分:0)

你在cpp文件中有linked_list的定义...所以如果包含.h文件,编译器就不会看到该结构的定义。

将struct的定义移动到头文件。

答案 3 :(得分:0)

在readcommend.h中

linked_list是类readcommand的成员,你可以通过readcommand对象访问它或者将linked_list移动​​到readcommand.h,如果readcommand.cpp,那么编译器知道“它是什么”