提问人:Moorease 提问时间:8/19/2023 最后编辑:Moorease 更新时间:8/19/2023 访问量:55
如何在嵌套类中实例化结构?
How do I instantiate structs inside a nested class?
问:
所以我到处谷歌,都找不到我的问题的直接答案。我已经有一段时间没有接触C++了,所以我想采用极简主义的编码结构,但我遇到了一个问题。
我有一个父类调用 .h 文件中的 Data
我还有 2 个嵌套在数据中的类,称为“内存”和“函数”
我创建了 2 个 .cpp 文件,每个嵌套类一个,“Memory.cpp”存储变量和结构数据,“Functions.cpp”存储函数数据
我在使用“Memory”类时遇到了问题
我找不到一种方法或解决方案来实例化“Memory”类的结构,尽我所能
这是我的 Classes.h 文件
#pragma once
#include "main.h"
class Data
{
public:
class Memory
{
public:
//I ALREADY CODED THE STRUCTS IN MY "MEMORY.CPP" FILE
struct sig;
struct set;
struct val;
//I TRIED WRITING THIS INSIDE THIS PUBLIC CLASS MEMORY AND ITS AN ERROR
//sig sig0;
//set set0;
//val val0;
};
class Functions
{
public:
void setup(Memory& gMem);
void mainLoop(Memory& gMem);
};
Memory gMem;
Functions gFunc;
Data()
{
//I'M TRYING TO PASS BY REFERENCE SELF gMem INTO SETUP FUNCTION,
//WHICH THE FUNCTION ACCESSES THE STRUCTS INSIDE
//THE PUBLIC MEMORY CLASS
//BUT IT CANNOT EVEN GRANT THIS
this->gFunc.setup(this->gMem);
this->gFunc.mainLoop(this->gMem);
}
};
这是我的主要 .cpp 文件
#include "main.h"
int main()
{
Data run;
return 0;
}
这是我的main.h文件
#include <iostream>
#include <vector>
#include "Classes.h"
我希望这有足够的信息来解决我的问题,我不想发布我的“Memory.cpp”和“Functions.cpp”文件,它的信息太多了。感谢任何好心帮助我的人。
答:
2赞
Alan Birtles
8/19/2023
#1
类成员必须是完整的类型,如果类型不完整,则只能使用指针或对它的引用。
因此,您要么需要将 和 的定义移动到头文件中,要么将 和 转到引用中(谨慎使用,引用成员有陷阱)或(最好是智能)指针。sig
set
val
sig0
set0
val0
0赞
machine_1
8/19/2023
#2
从结构实例化时,结构定义必须位于可见或相同作用域中的实例化之前,因为要从中实例化的类型必须完整。
因此,直接的解决方案是将 sig、set 和 val 的定义从 .cpp 文件移动到头文件。另一种解决方案是将 sig0、set0 和 val0 声明为指向相应结构体的指针,并在 cpp 文件中为它们分配内存。new
评论
std::unique_ptr