在{+ 3}}中使用C ++中的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]'
我注意到删除行bars = initial_bars;
可以解决问题。
好像我没有正确地完成任务。我怎么能解决这个问题?
编辑:
变量条是一个字符串数组。在main函数中,我将它初始化为:
string bars[] = {"bar1", "bar2", "bar3"};
但它可以包含任意数量的成员。
答案 0 :(得分:8)
Arrays的行为类似于const指针,你不能为它们指定指针。您也无法直接为彼此分配数组。
你要么
bar
s,并使用其内容初始化您的成员数组std
<{1}}容器的引用,例如std::vector
答案 1 :(得分:1)
可以按如下方式对数组成员进行“值初始化”:
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)
{
}