首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在类构造函数中初始化数组?

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

Stack Overflow用户
提问于 2009-09-23 23:25:12
回答 2查看 5.6K关注 0票数 4

Working in Xcode on Mac OS X Leopard in C++:

我有以下代码:

代码语言:javascript
运行
复制
class Foo{

private:
    string bars[];

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

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

代码语言:javascript
运行
复制
error: incompatible types in assignment of 'std::string*' to 'std::string [0u]'

我注意到删除行bars = initial_bars;就解决了这个问题。看起来我没有把作业做对。我该如何着手解决这个问题呢?

编辑:

变量bar是一个字符串数组。在main函数中,我像这样初始化它:

代码语言:javascript
运行
复制
string bars[] = {"bar1", "bar2", "bar3"};

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-23 23:45:30

数组的行为就像常量指针,你不能给它们赋值指针。您也不能直接将数组彼此赋值。

你要么

  • 使用指针成员变量
  • 具有固定大小的bar,并使用其内容初始化成员数组
  • 只需使用对std容器的引用即可,如std::vector
票数 8
EN

Stack Overflow用户

发布于 2009-09-24 09:13:54

可以“值初始化”数组成员,如下所示:

代码语言:javascript
运行
复制
class A {
public:
  A () 
  : m_array ()       // Initializes all members to '0' in this case
  {
  }

private:
  int m_array[10];
};

对于POD类型,这一点很重要,因为如果您没有在成员初始化列表中列出'm_array‘,那么数组元素将具有不确定的值。

一般来说,最好在成员初始化列表中初始化成员,否则成员会被初始化两次:

代码语言:javascript
运行
复制
A (std::vector<int> const & v)
// : m_v ()   // 'm_v' is implicitly initialized here
{
  m_v = v;    // 'm_v' now assigned to again
}

更高效地写成:

代码语言:javascript
运行
复制
A (std::vector<int> const & v)
: m_v (v)
{
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1469033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档