简体   繁体   English

c ++,“错误:聚合对象应初始化为'{…}'”

[英]c++, “Error: initialization with '{…}' expected for aggregate object”

When compiling this code I get the error, "Error: initialization with '{...}' expected for aggregate object" at my function calls. 编译此代码时,在函数调用中出现错误"Error: initialization with '{...}' expected for aggregate object" I am compiling using Visual Studio 11. 我正在使用Visual Studio 11进行编译。

#include <iostream>
#include <string>
#include <array>
using namespace std;

typedef std::array<string, 5> string_t;
string_t centerString(std::array<string, 5> (&tempArray),unsigned short int length);
string_t evenString(std::array<string, 5> (&tempArray),unsigned short int length);

int main(){
    std::array<string, 5> aArray = {"a","aa","aaa","aaaa","aaaaa"};

    std::array<string, 5> evenStr[5] = evenString(aArray,5);
    std::array<string, 5> centerStr[5] = centerStr(aArray,5);
}


 string_t evenString(std::array<string, 5> (&srcArray),unsigned short int length){
     std::array<string, (sizeof(srcArray)/sizeof(srcArray[0]))> trgtArray= {};
     for(unsigned short int x = 0; x < (sizeof(srcArray)/sizeof(srcArray[0]));x++){
         trgtArray[x] = srcArray[x];
         for(unsigned short int y = 0; y < (length-trgtArray[x].length()); y++){
             trgtArray[x] += " ";
         }
     }

     return(trgtArray);
}

 string_t centerString(std::array<string, 5> (&srcArray),unsigned short int length){
     std::array<string, (sizeof(srcArray)/sizeof(srcArray[0]))> trgtArray= {};
     unsigned short int remainder;
     string spacer = "";
     for(unsigned short int x = 0; x < (sizeof(srcArray)/sizeof(srcArray[0]));x++){
         remainder = length - srcArray[x].length();
         if((remainder % 2) == 0){
            trgtArray[x] = srcArray[x];
            for(unsigned short int y = 0; y < (length-srcArray[x].length()); y++){
                trgtArray[x] += " ";
            }
         }else{
             for(unsigned short int z = 0; z < (remainder/2); z++){
                 spacer += " ";
             }
             trgtArray[x] = spacer + srcArray[x] + spacer + " ";
         }
     }

     return(trgtArray);
 }

You are returning temporary reference in centerString 您将在centerString中返回临时引用

string_t& centerString(std::array<string, 5> (&tempArray),unsigned short int length);

centerStr is array, can't use it as function centerStr是数组,不能将其用作函数

std::array<string, 5> centerStr = centerStr(aArray,5);

I guess you mean 我想你是说

std::array<string, 5> centerStr = centerString(aArray,5);

You could try below sample function, just return array out, RVO should kick in. 您可以尝试下面的示例函数,只需返回数组,RVO就可以启动。

std::array<string,5> evenString(std::array<string, 5> (&srcArray), unsigned short length){
     std::array<string,5> trgtArray = {};
    //....
     return trgtArray;
}  

std::array<string, 5> evenStr = evenString(aArray,5);
std::array<string, 5> centerStr = centerString(aArray,5);

Don't ever use native arrays, they suck horrifically, and this is one of the ways in which they suck. 永远不要使用本机数组,它们很糟糕,这就是它们的最糟糕的吸收方法之一。 Basically, this would require that arrays act sanely and they do not. 基本上,这将要求数组具有合理的作用,而不能。 Language-enforced bad basically means that they can't do a whole host of things that you would expect from any other data type, and they're really not worth the time to use when you could just use std::array like a baus sane person. 语言强制的错误基本上意味着它们无法完成您希望从任何其他数据类型中获得的全部功能,并且当您仅可以像使用 baus 一样使用std::array时,它们确实不值得花时间使用理智的人。

Use std::array and be grateful that even the Committee accepts the suckage of C arrays. 使用std::array并感谢甚至委员会也接受C数组。

I, interestingly, note that you did indeed include <array> , but then did not use std::array . 有趣的是,我注意到您确实包含了<array> ,但随后没有使用std::array

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

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