繁体   English   中英

如何在类构造函数中初始化数组?

[英]How to initialize an array in a class constructor?

使用C ++在Mac OS X Leopard上使用Xcode

我有以下代码:

class Foo{

private:
    string bars[];

public:
    Foo(string initial_bars[]){
        bars = initial_bars;
    }
}

它不编译并抛出以下错误:

error: incompatible types in assignment of 'std::string*' to 'std::string [0u]'

我注意到删除了line bars = initial_bars; 解决了这个问题。 好像我没有正确地完成任务。 我怎么能解决这个问题呢?

编辑:

变量条是一个字符串数组。 在main函数中,我将它初始化为:

string bars[] = {"bar1", "bar2", "bar3"};

但它可以包含任意数量的成员。

数组的行为类似于const指针,您无法为它们指定指针。 您也无法直接为彼此分配数组。

你要么

  • 使用指针成员变量
  • 你得到一个固定大小的bar并用你的内容初始化你的成员数组
  • 只需使用std容器的引用,如std::vector

可以按如下方式“值初始化”数组成员:

class A {
public:
  A () 
  : m_array ()       // Initializes all members to '0' in this case
  {
  }

private:
  int m_array[10];
};

对于POD类型,这很重要,就好像您没有在成员初始化列表中列出'm_array'那样数组元素将具有不确定的值。

通常,最好在member-initialization-list中初始化成员,否则成员将初始化两次:

A (std::vector<int> const & v)
// : m_v ()   // 'm_v' is implicitly initialized here
{
  m_v = v;    // 'm_v' now assigned to again
}

更有效地写作:

A (std::vector<int> const & v)
: m_v (v)
{
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM