将文件流传递给构造函数时声明冲突

问题描述 投票:0回答:1

我正在尝试为一个类创建 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;
}
c++ file class constructor
1个回答
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;
}
© www.soinside.com 2019 - 2024. All rights reserved.