2012-12-03 19 views
1

編譯此代碼時,在函數調用時出現錯誤"Error: initialization with '{...}' expected for aggregate object"。我使用Visual Studio 11C++「,錯誤:使用'{...}'進行初始化,聚合對象預期爲」

#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); 
} 
+2

你可能要考慮'std :: array'。 – chris

+0

我不確定'string a = {};'是一個有效的表示法。無論如何,你使用的是什麼編譯器_和version_? –

+0

你不能在C++中按值返回數組,而不是直接返回。你應該按照克里斯提示的做。 – StoryTeller

回答

1

您在centerString

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

centerStr返回臨時引用數組,不能用它作爲函數

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

我猜你的意思是

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

你可以試試低於樣品功能,只需返回陣列,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); 
+0

這不是直接返回數組嗎?我的理解是,這不能用C++來完成。 –

+1

std :: array是一個容器,它不是原始數組,應該能夠像使用向量一樣使用它。 – billz

+0

我做了您所建議的更改,但代碼仍然存在。 –

0

千萬不要使用本地陣列編寫,他們吸速度驚人,而這是在他們吸的方式之一。基本上,這將要求數組表現出理智,而不是。語言強制的錯誤基本上意味着他們不能完成所有其他數據類型的東西,而且他們真的不值得花時間使用,當你可以使用std::array就像 baus 理智人。

使用std::array並且很感激,即使委員會接受C陣列的吮吸。

我有意思地注意到,你的確的確包括<array>,但之後沒有使用std::array

+0

我已經將它改爲使用'#include ',問題依然存在。 –

+0

他在哪裏傳遞或返回數組? –

+1

添加包含不會*做任何事情。你必須去使用在那裏定義的模板,'std :: array'。 – Puppy