2011-02-15 9 views
5

oluşturulan dizi iletin: düşündüğümden sözdizimi bir derleme hatası tükürmek çalışır ediyorumC++: Biri şu kod örneğine göre o beklediğiniz gibi bir sonuç elde edebilirsiniz nasıl işlev çağrısı hattı

// assuming: void myFunction(int* arr); 

myFunction([ 123, 456, 789 ]); 

// as syntactical sugar for... 

int values[] = { 123, 456, 789 }; 
myFunction(values); 

.

    I fonksiyonu olarak adlandırılır direkt olarak hat üzerinde bir argüman dizisi tanımlayabilir nasıl
  • ?
+0

Derleme hatası neydi? – Maxpm

+0

hatası C2143: sözdizimi hatası: eksik ']' önce 'sabit' – Jarx

+0

bunu yapan kötü bir fikir, 'myFunction' dizisinde geçirilen boyutun boyutunu bilmenin bir yolu yoktur. Hemen hemen her zaman daha iyi 'vektör' – Nim

cevap

3

Sen C, sözdizimi kuralları şeker ulaşamayacağını ++ kodu yapmak mümkün olacaktır rağmen. ayraçları Bir dizinin elemanlarına atıfta bulunarak, izin verilen tek yer, adlandırılmış dizi başlatılıyor içinde: Başka hiçbir yerde

int arr[] = { 0, 1, 2 }; 

. Bununla birlikte Boost.Assign benzer bir etkiyi elde edebilirsiniz:

void f(const std::vector<int>& v) 
{ 
} 

// ... 
f(boost::assign::list_of(123)(456)(789)); 
+1

"Uygun yapıcı ile sınıf" fikri kaldırıldı. Kötü fikir, onu yazan aptal adamı dinleme. – wilhelmtell

3

Eğer C++0x standardının bir parçası olarak önerilmiştir aradığınızı gibi bir şey. Aksi halde yapmanın bir yolu olduğuna inanıyorum (şu anda).

void function_name(std::initializer_list<float> list); 

function_name({1.0f, -3.45f, -0.4f}); 
3

(özellikl C99,) C kullanıyorsanız, burada değişmez bir bileşik kullanılmış olabilir:

myFunction((int []) {123, 456, 789}); 

Ama C parçası değildir ++ (sizin derleyici Yine de onları destekleyebilir). C++ 0x'da, bir başlatıcı listesi kullanabilirsiniz, ancak işaretçiler için çürümezler (işlenmemiş işaretçiler kullanılarak başlamak iyi bir fikir değildir).

Eğer void myFunction(const int* arr) için myFunction imzasını değiştirirseniz, C++ 03, yapmacık görüşme

myFunction(std::initializer_list<int>({123, 456, 789}).begin()); 
1

Sen bunu yapabilir, ama iki şey kullanmak zorunda:

  1. kullanım std::vector (veya başka bir C++ STL sınıfı)

  2. -std = C++ 0x derleme anahtarını (veya derleyici için C++ 0x standardını kullanmak için başka bir şey) kullanın.

İlgili konular