初始化自定义类型构造函数的数组

时间:2019-07-29 00:46:45

标签: c++

我在声明和初始化具有自定义类型的数组时遇到困难。

我想要使用自定义数据类型的数组的声明和初始化。

我的自定义数据类型如下:

struct Node
{
    long long data;
    int count;
    std::string name;
    Node *left, *right;
    Node(long long data, int count, std::string name): data(data), count(count), name(name), left(nullptr), right(nullptr) {}
};

现在,我在这里尝试几种不起作用的方法。

Node nodes[100] = {Node(0,0,"unknown")};

或者,

Node nodes[100](Node(0,0,"unknown"));

或者,

Node nodes[100]{Node(0,0,"unknown")};

有人可以帮我吗?在C ++中应该使用什么正确的符号?最终结果应该是要使用 (0,0,“ unknown”) 初始化的所有数组。

2 个答案:

答案 0 :(得分:1)

您的成员的默认值应该会有所帮助:

apply(expand.grid(lapply(df_NAs, na.omit)), 1, paste, collapse = "")

然后可以在不指定值的情况下构造数组:

a= 5
b= 10
a= 10
b= 5
a= 5
b= 10


void swap (int* a, int* b) {
    int c = 0 ;
    c = a ;
    a = b ;
    b = c ;

    printf ("a= %d\n", a) ;
    printf ("b= %d\n", b) ;

    return ;
}

int main(){
    int* a = 5 ;
    int* b = 10 ;

    printf ("a= %d\n", a) ;
    printf ("b= %d\n", b) ;

    swap (a,b) ;

    printf ("a= %d\n", a) ;
    printf ("b= %d\n", b) ;

    return (0) ;

}

答案 1 :(得分:1)

int arr[100] = {0};

此处要做的是将第一个元素初始化为0,然后将值初始化其余的元素。 int的值初始化为零初始化,并且格式正确。

Node nodes[100] = {Node(0,0,"unknown")};

您在这里执行的操作是使用Node(0,0,"unknown")初始化第一个元素,然后使用值初始化其余元素。类类型的值初始化将调用默认构造函数。 Node不能默认构造,因此程序格式错误。

Node nodes[100](Node(0,0,"unknown"));

必须对数组使用大括号初始化。使用括号是语法错误。

Node nodes[100]{Node(0,0,"unknown")};

除了直接初始化语法而不是复制列表初始化之外,它与第一个相同。


可能的解决方案:

  • 通过声明默认构造函数使该类默认可初始化。这可以是不带参数的构造函数,也可以是所有参数都具有默认值的构造函数。
  • 为数组的每个元素提供一个初始化程序(对于100个元素的数组可能有点乏味)。