2014-04-23 172 views
1

在VS 2013我可以做傳遞一個向量函數參數

void myFunction(vector<int> myVector) 
{ 
    // Do something with myVector 
} 

而且我可以使用函數:

void anotherFunction() 
{ 
    myFunction({1, 25, 33, 45, 80}); 
} 

但如果我編譯這段代碼的Xcode 3.5(GCC 4.2)在'{'標記「和」沒有匹配的函數調用另一個函數(void)「之前,我得到錯誤」「。

有沒有一個優雅的解決方法,我可以使GCC 4.2理解我傳遞一個常量向量作爲函數參數?

+0

您需要對C++ 11的支持。 GCC 4.2。可能會提供*一些*,但可能不夠。 – juanchopanza

+0

直到GCC 4.8(4.7中的部分支持)才支持C++ 11。 –

+0

http://gcc.gnu.org/projects/cxx0x.html:4.2中不支持C++ 11。 – AntiClimacus

回答

5

支持GCC中的initializer lists從版本4.4開始,請參閱here。編譯器根本不理解語法。

您需要設置向量的C++ 98的方式,比如像這樣:

void anotherFunction() 
{ 
    vector<int> myVector; 
    const int values[] = {1, 25, 33, 45, 80}; 
    myVector.insert(myVector.begin(), values, values + sizeof(values)/sizeof(values[0])); 
    myFunction(myVector); 
} 

我不認爲你可以得到比C++ 98好得多。

1

我很確定GCC 4.2你必須事先聲明向量。另外,我將使用一個向量< int> const &作爲參數,以便它不復制向量。

+2

你怎麼知道他們不需要一個載體的副本? – juanchopanza

+0

值得注意的是,GCC 4.2甚至不接受矢量的初始化,它使用'vector myVector = {1,5,9};'這非常煩人,因爲我必須在每次需要時聲明並初始化一個新的const vector調用該函數。 –