如何使用头文件中某处声明的枚举? 我是C++初学者,从昨天起我就有这个问题了。 我有两个头文件: “Builder.hpp”,其中包括一些枚举和结构的声明和定义: #ifndef BUILDER_HPP #define BUILDER_HPP #ifdef _DEFAULT_INCLUDES #include <AsDefault.h> #endif #include "../EcoLibs/EcoComLib/OpcUaCom.hpp" #include "LineCoordEngine.hpp" //Builder class help types enum BuildOpcUaType_enum { //Some stuff }; enum BuildVariableTypes_enum { //Some stuff }; struct BuildOpcUaLists_type { //Some stuff }; //Builder class class Builder { public: Builder(); ~Builder(); Machine *BuildOpcUaMachine(char serverUrl[UA_MAX_STRING], BuildOpcUaLists_type *lists, BuildOpcUaType_enum uaType); DataExchanger *BuildDataExchanger(unsigned short int machineIndex, unsigned short int machineTypeIndex); private: void CreateOpcUaList(//stuff); void CreateCharNumber(//stuff); //Private variables declaration }; #endif \ifndef BUILDER\u水电站 #定义建造者_水电站 #ifdef\u默认值\u包括 #包括 #恩迪夫 #包括“./EcoLibs/EcoComLib/OpcUaCom.hpp” #包括“LineCoordEngine.hpp” //生成器类帮助类型 枚举构建opcuatype_枚举 { //一些东西 }; 枚举BuildVariableTypes\u枚举 { //一些东西 }; 结构BuildOpcUaLists\u类型 { //一些东西 }; //建筑工人阶级 类生成器 { 公众: 生成器(); ~Builder(); 机器*BuildOpcUaMachine(字符服务器URL[UA\u MAX\u STRING],BuildOpcUaLists\u type*列表,BuildOpcUaType\u enum uaType); DataExchanger*BuildDataExchanger(无符号短整型机器索引,无符号短整型机器索引); 私人: void CreateOpcUaList(//stuff); void CreateCharNumber(//stuff); //私有变量声明 }; #恩迪夫

如何使用头文件中某处声明的枚举? 我是C++初学者,从昨天起我就有这个问题了。 我有两个头文件: “Builder.hpp”,其中包括一些枚举和结构的声明和定义: #ifndef BUILDER_HPP #define BUILDER_HPP #ifdef _DEFAULT_INCLUDES #include <AsDefault.h> #endif #include "../EcoLibs/EcoComLib/OpcUaCom.hpp" #include "LineCoordEngine.hpp" //Builder class help types enum BuildOpcUaType_enum { //Some stuff }; enum BuildVariableTypes_enum { //Some stuff }; struct BuildOpcUaLists_type { //Some stuff }; //Builder class class Builder { public: Builder(); ~Builder(); Machine *BuildOpcUaMachine(char serverUrl[UA_MAX_STRING], BuildOpcUaLists_type *lists, BuildOpcUaType_enum uaType); DataExchanger *BuildDataExchanger(unsigned short int machineIndex, unsigned short int machineTypeIndex); private: void CreateOpcUaList(//stuff); void CreateCharNumber(//stuff); //Private variables declaration }; #endif \ifndef BUILDER\u水电站 #定义建造者_水电站 #ifdef\u默认值\u包括 #包括 #恩迪夫 #包括“./EcoLibs/EcoComLib/OpcUaCom.hpp” #包括“LineCoordEngine.hpp” //生成器类帮助类型 枚举构建opcuatype_枚举 { //一些东西 }; 枚举BuildVariableTypes\u枚举 { //一些东西 }; 结构BuildOpcUaLists\u类型 { //一些东西 }; //建筑工人阶级 类生成器 { 公众: 生成器(); ~Builder(); 机器*BuildOpcUaMachine(字符服务器URL[UA\u MAX\u STRING],BuildOpcUaLists\u type*列表,BuildOpcUaType\u enum uaType); DataExchanger*BuildDataExchanger(无符号短整型机器索引,无符号短整型机器索引); 私人: void CreateOpcUaList(//stuff); void CreateCharNumber(//stuff); //私有变量声明 }; #恩迪夫,c++,header-files,C++,Header Files,第二个头文件是:“Parser.hpp”。 我想声明一个在“Builder.hpp”中定义的“BuildOpcUaType_enum”类型的变量。我在“Parser.hpp”中包含了“Builder.hpp”,但仍然得到一个错误,即: BuildOpcUaType_枚举未命名类型 Parser.hpp: #ifndef BUILDER_HPP #define BUILDER_HPP #include "Builder.hpp" #include <string> using n

第二个头文件是:“Parser.hpp”。 我想声明一个在“Builder.hpp”中定义的“BuildOpcUaType_enum”类型的变量。我在“Parser.hpp”中包含了“Builder.hpp”,但仍然得到一个错误,即: BuildOpcUaType_枚举未命名类型

Parser.hpp:

#ifndef BUILDER_HPP
#define BUILDER_HPP

#include "Builder.hpp" 
#include <string>

using namespace std;

struct Attributes{
    string name;
    string value;
};

BuildOpcUaType_enum en;
class Parser{
    private:
        //Variables:
        Attributes attributes[10]; 
        unsigned int BufferIds[200];
        string connectionStrings[20];
        unsigned long int nFileLength, nOpenFileIdent, nXMLReaderIdent; 
        unsigned short int length, noOfOpenedStructs, readListIndex, writeListIndex, readListDestIndex, writeListSrcIndex;
        string comType, sErrorMessage, sStatusText, sXMLElementName, sXMLElementValue;
        string structNameAttValues[10];
        unsigned int TagId_Read[200];
        unsigned int TagId_Write[200];
        unsigned short int xmlData[10000];

        //Boolean variables:
        bool isArrayTag, isBufferIdTag, isDatatypeTag, isNameTag, bStart, isTagIdTag;

        //Constants:
        string sFilePath;
        string sDeviceName;

        //The rest? 
        BuildOpcUaType_enum en;

    public:
        Parser();
        ~Parser();
};
#endif
\ifndef BUILDER\u水电站
#定义建造者_水电站
#包括“Builder.hpp”
#包括
使用名称空间std;
结构属性{
字符串名;
字符串值;
};
构建opcuatype_enum en;
类解析器{
私人:
//变量:
属性[10];
无符号int-BufferIds[200];
字符串连接字符串[20];
无符号长整数长度,无文件标识,nXMLReaderIdent;
无符号短整型长度、noOfOpenedStructs、readListIndex、writeListIndex、readListDestIndex、writeListSrcIndex;
字符串comType、sErrorMessage、sStatusText、SXMLEMENTNAME、SXMLEMENTVALUE;
字符串structNameAttValues[10];
无符号int-TagId_读取[200];
无符号int-TagId_-Write[200];
无符号短整数xmlData[10000];
//布尔变量:
bool isArrayTag、isBufferIdTag、isDatatypeTag、isNameTag、bStart、istag;
//常数:
字符串路径;
字符串sDeviceName;
//其余的呢?
构建opcuatype_enum en;
公众:
解析器();
~Parser();
};
#恩迪夫

两个头文件中的include guard都是
BUILDER\u HPP
。您需要为每个文件使用一个唯一的文件名(这就是为什么它通常是文件名)


目前,您实际上并没有包含来自
Builder.hpp
的任何内容,因为
\define Builder\u hpp
发生在
\include“Builder.hpp”
解析器中的
之前,因此include-guard
\ifndef-Builder\u-hpp
的计算结果为false。

冒昧地修复了您的“syyou's-you-you-is-right”。我已经修好了。现在我得到了一堆其他错误:C函数'double atof(const char*)的声明与。。。以前的声明“float atof(long unsigned int)”,这里C函数“int atoi(const char*)”的声明与。。。上一个声明'long int atoi(long unsigned int)'here@DhiaaEddinAnabtawi快乐修复:)如果你被卡住了,请随意问另一个问题。@Dhiaadedinanabtawi,正如我所说:如果你有进一步的问题,请问一个新问题。