我已阅读以下链接中找到的所有建议

  • c++ typedef another class's enum?
  • http://forums.devarticles.com/c-c-help-52/how-to-use-enum-when-it-is-in-another-class-17773.html
  • http://forums.codeguru.com/showthread.php?t=435215
  • How do I use the Enum value from a class in another part of code?

  • 但仍然找不到我的问题的解决方案:



    以下是代码片段:

    文件A.h:
    Class A{
        public:
           enum FileType{TEXT, BIN};
    
           /*! This constructor initializes the data from a given file
            *  (binary, text, image).
            */
           A(const std::string& filename, FileType type);
    
    }
    

    文件A.cpp:
    A::A(const std::string& filename, FileType type){
     ...
    }
    

    文件B.h:
    Class B{
    
        private:
           A objectOfClassA;
    
        public:
           enum FileType{TEXT = A::FileType::TEXT, BIN = A::FileType::BIN}; //<----THIS IS NOT WORKING!
           foo_func(const std::string& filename, FileType type);
    
    }
    

    文件B.cpp:
    void B::foo_func(const std::string& filename, FileType type){
    
        this->objectOfClassA(filename, type); //should construct an object of class A
        ... //do stuff with objectOfClassA
    }
    

    文件main.cpp:
    int main(int argc, char** argv) {
    
        B objectOfClassB;
        objectOfClassB.foo_func("file_path", foo_func.TEXT);
    
    }
    

    通过尝试运行主程序,我从编译器在foo_func函数行的 B.cpp 文件中收到此错误:



    这意味着我没有使用正确的枚举类型来调用A class构造函数,但是我该如何解决呢?

    我究竟做错了什么?

    最佳答案

    B::FileTypeA::FileType是不同的类型。您需要在B内用typedef A::FileType FileType正确别名,以便它们可以互换。否则B::FileType是一个与A::FileType在结构上相同,但在类型系统中不相关的枚举。这回答了您的主要问题。

    解决此问题仍将不允许您的代码编译,但是,这不是该错误所抱怨的。

    objectOfClassA已经在foo_func内部构造。调用this->objectOfClassA(filename, type)是一种尝试在对象上使用重载()运算符的尝试;该运算符不存在,因此代码无法编译。您只能通过B的构造函数使用初始化符号来构造objectOfClassA,例如

    B::B(const std::string& filename, FileType type) : objectOfClassA(filename, type)
    {
      ...
    }
    

    然后主要是这样做:
    B objectOfClassB("file_path", B::TEXT);
    

    逐步进入调试器以查看控制流。

    关于c++ - 使用另一个类的枚举类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9928022/

    10-10 01:00