我正在尝试为一个类创建 2 个构造函数,其中一个构造函数打开文件,检查错误,然后调用另一个构造函数。但我无法让它发挥作用。我收到错误:
冲突声明“A 文件”
我不能在另一个构造函数中调用构造函数吗?我一直以为我可以。
代码:
#include <iostream>
#include <fstream>
class A {
int a = 0;
public:
A()=default;
explicit A(char *filename);
explicit A(std::ifstream &file);
};
A::A(char *filename) {
std::ifstream file(filename);
if(!file.is_open()) {
std::cout << "ERROR!\n";
A();
return;
}
A(file); // Compilation error here
file.close();
}
int main()
{
return 0;
}
我不能在另一个构造函数中调用构造函数吗?我一直以为我可以。
你可以,但不是你想要的方式。在这种情况下,编译器将
A(file);
视为与 A file;
相同,但您已经有一个名为 file
的现有变量,因此存在冲突。
委托构造函数仅在成员初始化列表中工作,例如:
#include <iostream>
#include <fstream>
class A {
int a = 0;
public:
A() = default;
explicit A(char *filename);
explicit A(std::ifstream &file);
};
A::A(char *filename) :
std::ifstream(filename) {
}
A::A(std::ifstream &file) : A() {
if(!file.is_open()) {
std::cout << "ERROR!\n";
}
}
int main()
{
A a("file.txt");
return 0;
}