我正在尝试为我的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’
提前致谢。
答案 0 :(得分:1)
你需要把这些......
struct node {
const char *word;
node *prev;
node *next;
};
struct linked_list {
node *first;
node *last;
};
...在class readcommand
中使用之前编译器会在之前看到它们的位置。可能最简单的方法是将它们放在 class readcommand
之前的readcommand.h 中。问题是node
和linked_list
正在class readcommand
中使用,但编译器在编译时不知道它们是什么。
答案 1 :(得分:0)
时,需要显示结构/类定义(而不仅仅是声明)
编译器需要知道对象的大小及其字段的位置。
这就是为什么您可能希望将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,那么编译器知道“它是什么”