gpt4 book ai didi

c++ - 代理语法错误 : What am I doing wrong?

转载 作者:行者123 更新时间:2023-11-28 03:44:55 26 4
gpt4 key购买 nike

目前我正在通过我的书学习 C++,他们有一个关于使用以前创建的名为 IntList 的类并使用 IntListProxy 实现它的练习。我的书只在一个非常简单的例子中谈论代理,所以我很难理解它的语法。我在使用此代理时做错了什么,我该如何解决?请记住 IntList 已经是一个 .o 并且我在编译它时不允许包含 IntList.cpp 。错误:

IntListProxy.cpp: In member function ‘bool IntListProxy::isEmpty()’:
IntListProxy.cpp:7: error: invalid use of incomplete type ‘struct IntList’
IntListProxy.h:5: error: forward declaration of ‘struct IntList’
IntListProxy.cpp: In member function ‘IntListProxy* IntListProxy::prepend(int)’:
IntListProxy.cpp:13: error: invalid use of incomplete type ‘struct IntList’
IntListProxy.h:5: error: forward declaration of ‘struct IntList’
IntListProxy.cpp: In member function ‘int IntListProxy::head()’:
IntListProxy.cpp:19: error: invalid use of incomplete type ‘struct IntList’
IntListProxy.h:5: error: forward declaration of ‘struct IntList’
IntListProxy.cpp: In member function ‘IntListProxy* IntListProxy::tail()’:
IntListProxy.cpp:25: error: invalid use of incomplete type ‘struct IntList’
IntListProxy.h:5: error: forward declaration of ‘struct IntList’
IntListProxy.cpp: In member function ‘std::string IntListProxy::toString()’:
IntListProxy.cpp:31: error: invalid use of incomplete type ‘struct IntList’
IntListProxy.h:5: error: forward declaration of ‘struct IntList’
IntListProxy.cpp: In member function ‘int IntListProxy::length()’:
IntListProxy.cpp:37: error: invalid use of incomplete type ‘struct IntList’
IntListProxy.h:5: error: forward declaration of ‘struct IntList’
IntListProxy.cpp: In member function ‘IntListProxy* `IntListProxy::append(IntListProxy*)’:`
IntListProxy.cpp:43: error: invalid use of incomplete type ‘struct IntList’
IntListProxy.h:5: error: forward declaration of ‘struct IntList’
IntListProxy.cpp: In member function ‘int IntListProxy::operator[](int)’:
IntListProxy.cpp:49: error: invalid use of incomplete type ‘struct IntList’
IntListProxy.h:5: error: forward declaration of ‘struct IntList’
IntListProxy.cpp:51: error: expected unqualified-id before ‘}’ token
IntListProxy.cpp:51: error: expected ‘;’ before ‘}’ token

IntListProxy.h

#include <iostream>
#include <string>

using namespace std;
class IntList;

class IntListProxy
{
public:
IntListProxy();
bool isEmpty();
IntListProxy *prepend(int n);
int head();
IntListProxy *tail();
string toString();
int length();
IntListProxy *append(IntListProxy *lst);
int operator[](int n);
private:
IntList *ptr;

};

IntListProxy.cpp

#include "IntListProxy.h"

IntListProxy::IntListProxy(){}

bool IntListProxy::isEmpty(){

ptr->isEmpty();

}

IntListProxy *IntListProxy::prepend(int n){

return ptr->prepend(n);

}

int IntListProxy::head(){

return ptr->head();

}

IntListProxy *IntListProxy::tail(){

return ptr->tail();

}

string IntListProxy::toString(){

return ptr->toString();

}

int IntListProxy::length(){

return ptr->length();

}

IntListProxy *IntListProxy::append(IntListProxy *lst){

return ptr->append(lst);

}

int IntListProxy::operator[](int n){

return ptr->operator[](n);

}

提前致谢!

最佳答案

建议的解决方案:
您需要在您的 cpp 文件 IntListProxy.cpp 中包含定义类 IntList 的头文件。

解释:
当您添加行而不是包含头文件时:

class IntList;

它向前声明类 IntList,这意味着对于编译器它是一个不完整类型。对于 Incomplete 类型,您不能创建它的对象或做任何需要编译器知道 IntList 布局的事情,或者除了 IntList 只是一种类型这一事实之外。即:编译器不知道它的成员是什么以及它的内存布局是什么。但是由于指向所有对象的指针只需要相同的内存分配,因此当仅引用不完整类型作为指针时,您可以使用前向声明。

在这种情况下,您的 cpp 文件 IntListProxy.cpp 需要知道 IntList 的布局(成员)才能取消引用它,因此会出现错误。

关于c++ - 代理语法错误 : What am I doing wrong?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7957610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com