我已阅读以下链接中找到的所有建议
但仍然找不到我的问题的解决方案:
以下是代码片段:
文件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::FileType
和A::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/