gpt4 book ai didi

c++ - 在主类之外声明多个嵌套类

转载 作者:行者123 更新时间:2023-11-28 05:58:24 26 4
gpt4 key购买 nike

我有多个嵌套类,我想在单独的头文件中在主类之外声明,因为嵌套类很长。

这就是我想要做的:

class MainClass {
private:
classA;
classB;
classC;
//and so on
public:
method(C.var) {//code}

问题是我一直收到 Error:incomplete type not allowed. 因为类还没有被“定义”。除了将所有代码放入 MainClass 之外,我还能做些什么吗?

真实代码:

class Graph //fix subclass issues
{
private:
template <class TYPE> class * linkedList;
template <class TYPE> class * chainingTable;
class * minHeap;
class * vertex;
class * edge;

chainingTable<vertex*> vertexList;

vertex * findVertex(int addrs) { return vertexList.findVertex(addrs); }
int weight(vertex *v, vertex *u) { return v->weight + u->weight; }
void relax(vertex * v, vertex * u,int i, minHeap h)
{
if(v->weight > u->weight+weight(v,u))
{
v->weight = v->weight + weight(v,u);
h.decreaseKey(i, v->weight); //fixes heap
v->predecessor = u;
}
}
public:
void addVertex(int cost, int address)
{ vertexList.insert(new vertex(cost, address)); } //and the class continues

现在有了这些更改,我得到了一个Error: expected either a definition or tag name

编辑:添加了请求的真实代码,并添加了更新的错误

最佳答案

改用指向这些类的指针。

classA *objectA;
classB *objectB;
classC *objectC;

并且仅在 .cpp 文件中定义您的方法。

要了解发生了什么,当您定义一个类时,编译器必须知道该类的对象有多大。如果你定义的成员还没有被完全定义,那么编译器就没有关于这些类的大小的信息,因此它无法计算这个类的对象的大小。

但是,指针的大小始终相同(32 位为 4 个字节,64 位为 8 个字节),然后可以计算该类对象的大小。

ps: 请注意,您不应在.h 文件(头文件)中定义方法。头文件只应该有类的声明,.cpp 文件有它们的实现。

例如: header :

//--Class.h--
#ifndef MY_CLASS_H //include guards to make sure it only gets declared once
#define MY_CLASS_H

class MyClass
{
int _member;
public:
MyClass(); //ctor
~MyClass(); //dtor
int someMethod(int a, int b);
};

#endif

带有实现的构造函数

//--MyClass.cpp--
#include "MyClass.h" //include your declarations

MyClass::MyClass()
{
//constructor
}

MyClass::~MyClass()
{
//destructor
}

int MyClass::someMethod(int a, int b)
{
//code
}

关于c++ - 在主类之外声明多个嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33730893/

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