使用带参数和extern关键字的构造函数

时间:2014-04-09 01:48:01

标签: c++ constructor extern

我有一个全局类实例:

myclass.h

class Cmyclass {
public:
  void log(const char* msg);
  void set_file(std::string file);
private:
  std::string file;
};

myclass.cpp

void Cmyclass::log(const char* msg) {
  std::ofstream output_file(file.c_str(), std::ios::app) ;
  output_file << msg << std::endl;
}

void Cmyclass::set_file(std::string file) {
  this->file = file;
}

我在需要访问全局的文件中使用'extern'关键字:

extern Cmyclass myclass;

我想删除set_file()方法并在构造函数中设置文件:

Cmyclass::Cmyclass(std::string file) {
  this->file = file;
}

但是如果我这样做,由于构造函数中的参数,我上面的外部用法不再有效。 如果我的构造函数有参数,是否可以使用extern关键字?

谢谢!

P.S。这里有点明确...请注意上面的代码可以工作,我在其他地方实例化了类,但我想修改我的类,以便构造函数接受参数。如果是这样的话,我的外部声明应该如何?

1 个答案:

答案 0 :(得分:1)

如评论中所示:

  • extern声明而不是定义。它只是意味着那个类型的全局变量。

所以你有一些头文件(例如Globals.h)

extern Cmyclass myclass;

现在,如果您不希望链接器失败,必须在某个源文件中(例如Globals.C)

Cmyclass myclass;

现在,上面调用没有参数的构造函数。如果您只有一个带参数的构造函数,则可以将其替换为(在源文件中):

Cmyclass myclass=Cmyclass("Some File");

......但外部声明保持不变。以这种方式思考,其他人不关心你如何创建myclass全局变量,他们只是对使用它感兴趣。因此,它具有参数构造函数或者不仅仅在变量实例化时很重要(并且发生在* .C上,而不是在* .h上)