我已经阅读了以下链接中的所有建议
但仍然无法找到我的问题的解决方案:
我需要构建一个对象
class A(其构造函数期望作为输入参数,该类的枚举类型)来自对象的一个函数内部.class B
以下是代码段:
文件啊:
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);
}
Run Code Online (Sandbox Code Playgroud)
文件A.cpp:
A::A(const std::string& filename, FileType type){
...
}
Run Code Online (Sandbox Code Playgroud)
文件Bh:
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);
}
Run Code Online (Sandbox Code Playgroud)
文件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
}
Run Code Online (Sandbox Code Playgroud)
文件main.cpp:
int main(int argc, char** argv) {
B objectOfClassB;
objectOfClassB.foo_func("file_path", foo_func.TEXT);
}
Run Code Online (Sandbox Code Playgroud)
通过尝试运行主程序,我在函数行的B.cpp文件中从编译器得到此错误foo_func:
调用'(A)(std :: basic_string,B :: FileType&)'不匹配
这意味着我没有使用正确的枚举类型来调用A class构造函数,但我该如何解决这个问题呢?
我究竟做错了什么?
小智 6
B::FileType并且A::FileType是不同的类型.您需要typedef A::FileType FileType在B内部对类型进行正确别名,以便它们可以互换.否则B::FileType是一个枚举,它在结构上与A::FileType类型系统相同但不相关.这回答了您的主要问题.
但是,修复此问题仍然不允许编译代码,这不是错误所抱怨的内容.
objectOfClassA已经在foo_func中构造.调用this->objectOfClassA(filename, type)是尝试在对象上使用overloaded()运算符; 此运算符不存在,因此代码无法编译.您只能使用初始化符号表示构造函数来构造objectOfClassA,例如
B::B(const std::string& filename, FileType type) : objectOfClassA(filename, type)
{
...
}
Run Code Online (Sandbox Code Playgroud)
然后在main中你会这样做:
B objectOfClassB("file_path", B::TEXT);
Run Code Online (Sandbox Code Playgroud)
在调试器中单步执行以查看控制流.
| 归档时间: |
|
| 查看次数: |
6631 次 |
| 最近记录: |