簡體   English   中英

在二維數組中出現“初始化值過多”錯誤

[英]getting "Too Many Initializer Values" error in 2D array

void Data::Paramters()
    
{
    for (int i = 0; i < I; i++)
    {
        mc[i] = new int[K];
        for (int k = 0; k < K; k++)
        {
            mc[i][k] = {{1, 0, 2, 3, 5},{ 4, 2, 2, 1, 3 }, { 4, 3, 4, 1, 3 }, { 3, 5, 6, 4, 2 } };
        }
    }
}

在 I=5 和 K=4 的{ 4, 2, 2, 1, 3 } 開始時出現“太多初始化值”錯誤

初始值設定項用於 4x5 2D 矩陣,因此您應該只寫:

enum { I = 4, K = 5 };

int mc[I][K] = { { 1, 0, 2, 3, 5 },
                 { 4, 2, 2, 1, 3 },
                 { 4, 3, 4, 1, 3 },
                 { 3, 5, 6, 4, 2 } };

表達式mc[i][k]的類型為int 它不是數組。

所以這個賦值語句

mc[i][k] = {{1, 0, 2, 3, 5},{ 4, 2, 2, 1, 3 }, { 4, 3, 4, 1, 3 }, { 3, 5, 6, 4, 2 } };

沒有意義。

如果K是常量表達式,則可以按以下方式分配和初始化二維數組

int ( *mc )[K] = new int[I][K]
{ 
    { 1, 0, 2, 3, 5 },
    { 4, 2, 2, 1, 3 }, 
    { 4, 3, 4, 1, 3 }, 
    { 3, 5, 6, 4, 2 } 
}; 

這是一個演示程序。

#include <iostream>

int main()
{
    const size_t K = 5;
    size_t I = 4;

    int ( *mc )[K] = new int[I][K]
    {
        { 1, 0, 2, 3, 5 },
        { 4, 2, 2, 1, 3 },
        { 4, 3, 4, 1, 3 },
        { 3, 5, 6, 4, 2 }
    };

    for ( size_t i = 0; i < I; i++ )
    {
        for (const auto &item : mc[i])
        {
            std::cout << item << ' ';
        }
        std::cout << '\n';
    }
}

程序 output 是

1 0 2 3 5
4 2 2 1 3
4 3 4 1 3
3 5 6 4 2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM