【发布时间】:2021-12-24 12:51:59
【问题描述】:
我正在尝试初始化在类构造函数内的外部头文件中定义的结构对象。问题是我需要在类头文件myClass.h 中包含头文件,这导致already defined error
我试图将#include structHeader.h 封装在#ifndef #endif 中,但由于某种原因,它在其他一些更改后停止工作。
该结构在myClass.cpp 内部运行良好,但我必须在类外部对其进行初始化,这意味着它将属于该类而不是该类的实例。当然,我必须在 myClass.cpp 中包含结构头文件而不是 myClass.h,即使在这种情况下我在 myClass.cpp 中包含 myClass.h。
我找不到任何有关此案例的示例,我将不胜感激。
// myStruct.h
#pragma once
#ifndef H
#define H
#define NUM 10
typedef struct SUB
{
int exmaple;
int num;
} sub;
typedef struct Circle
{
float circleC;
float circlePoints[NUM];
} Circle;
#endif
// myClass.h
#include "myStruct.h"
class MYCLASS{
private:
Sub subObject;
Circle circleObject;
OTHERCLASS otherInstance;
int someValue;
public:
MYCLASS::MYCLASS(int someValue);
void someFunction();
// myClass.cpp
#include "myClass.h"
#include "otherClass.h"
MYCLASS::MYCLASS(int someValue, OTHERCLASS otherInstance){
this->someValue = someValue;
this->otherInstance = otherInstance;
// DO I need to initialize struct here?
}
MYCLASS::someFunction(){
}
// main.cpp
#include "myClass.h"
#include "otherClass.cpp"
int main(int argc, char* argv[]){
MYCLASS instance(2, OTHERCLASS());
return 0;
{
这是我想要做的一个示例,如果你能告诉我如何在 myClass 构造函数中添加外部类的实例而不是将实例作为构造函数参数传递会很棒我已经尝试了很多事情但是仍然出现一些错误。
【问题讨论】:
-
你说的“初始化一个结构”是什么意思?我想出的最接近的是“初始化类型为结构的对象”。示例代码将有助于说明您要描述的内容。
-
“我需要在类头文件中包含头文件” - 您的问题描述不能证明这种需要。也许您没有在头文件中定义构造函数?但如果是这样的话,为什么这种愿望比它造成的问题更强烈呢?
-
"我已经尝试将#include structHeader.h 封装在#ifndef #endif 中" -- 你应该将#ifndef #define #endif 添加到标题中,而不是包含。
标签: c++ visual-studio class struct lnk2005