c++ - 使用另一个类的枚举类型

标签 c++ class enums

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

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

但仍然无法找到解决我的问题的方法:

I need to construct an object of class A (whose constructor expects as an input parameter an enumerative type of that class) from inside a function of an object of class B

以下是代码片段:

文件 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);

}

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

no match for call to ‘(A) (std::basic_string, B::FileType&)’

这意味着我没有使用正确的枚举类型来调用 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/

相关文章:

Python3 和递归类

java - 不兼容的类型 : inference variable E#1 has incompatible upper bounds Enum<E#2>

c++ - OS X 中的信号量数组

c++ - 两个进程之间的 Ubuntu 共享内存,代码不工作

c++ - 常量字符串如何在 C++ 中工作

.net - 通过访问器或直接访问同一类的属性的最佳方法是什么?

reflection - 在 Kotlin 中通过反射获取 Enum 值

java - 使用枚举代替字符串

c++ - 查找大数数字总和的最快方法

c++ - 如何使 MSVC 调试版本运行得更快