【问题标题】:Initialize static variable objects to the same value将静态变量对象初始化为相同的值
【发布时间】:2018-03-29 07:14:29
【问题描述】:

我想将所有静态变量对象初始化为相同的值。我在prog1.h 中定义了一个类

  namespace fal {
    class read_f{
    public:
        static std::string ref_content, seq_content;
        int read_fasta(int argc, char **argv);
    };
}

我尝试在prog1.cpp中初始化它们

std::string fal::read_f::ref_content = seq_content = "";

但我得到undefined reference error

当我尝试时

std::string fal::read_f::ref_content = "" ;
std::string fal::read_f::seq_content = "";

效果很好。

如何在一行中初始化?

【问题讨论】:

  • 好吧,当你还没有声明 b 时,你也不能这样做 int a = b = 10
  • @JoshKisb 类中没有定义ab
  • @AaghazHussain std::string fal::read_f::ref_content = seq_content = ""; 没有定义 seq_content (这是您问题的根源)。你的类只包含声明。
  • @AlgirdasPreidžius 你的意思是std::string fal::read_f::ref_content , seq_content ; ref_content = seq_content = ""; 应该可以工作。
  • 它们没有在类中声明。这就是为什么如果你尝试为它们分配一个值而不在全局中初始化你会得到错误,因为它们不存在

标签: c++ static initialization


【解决方案1】:

你用逗号内联它们。如果您不想重复 fal:: 限定符,可以使用 using 声明:

using fal::read_f;
std::string read_f::ref_content = "", read_f::seq_content = "";

此外,从 C++17 开始,您可以将这两个变量设为 inline,以便它们可以在类定义中定义 ([class.static.data])。

【讨论】:

  • 这是最好的选择吗
  • @AaghazHussain 我认为这是最好的,除了你可以为"" 定义变量之外你不能做任何事情,因为在= 运算符的左边你需要有lvalue ,但如果没有事先定义,这些名称不会计算为对象、位域或函数,因此它们不是泛左值,因此也不是左值。
猜你喜欢
  • 2016-01-24
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 2010-12-22
  • 2020-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多