2012-04-25 3 views
3

Je suis en train de définir et d'utiliser un tableau 2D en C++tableau statique 2d

const float twitterCounts[][5] = { 
     {1,0,0,0,0}, 
     {0,2,0,0,0}, 
     {0,0,3,0,0} 
}; 

comme retourner ceci:

const float ??? TwitterLiveData::data() { 
    return twitterCounts; 
} 

et en utilisant comme ça

float x = TwitterLiveData::data()[1][1]; 

Quelle est la signature appropriée pour l'accesseur statique?

+3

Il est beaucoup plus facile d'utiliser un vecteur. Est-ce une possibilité? – chris

Répondre

5

Vous ne pouvez pas retourner un tableau, mais vous pouvez renvoyer le pointeur sur son premier élément ou sur sa référence au tableau. Il suffit de mettre le type correct dans la signature:

const float (*TwitterLiveData::data())[5] { 

Ou peut-être

const float (&TwitterLiveData::data())[3][5] { 
+0

Ceci l'a fixé pour moi merci! – user1356937

0

Cela dépend de votre compilateur, mais la plupart du temps le nom d'un double tableau compte comme un double pointeur. Donc dans votre cas twitterCounts est un flotteur **.

+3

Pas vrai. 'twitterCounts' ne sera jamais un' float ** 'mais en tant que tableau de type' float [5] 'il se désintègrera en un pointeur de type' float [5] '; donc "twitterCounts" "est un" (décote à) "float (*) [5]' – Anthales

3

Voir: https://stackoverflow.com/a/10264383/365496

Résumé:

#include <array> 

const std::array<std::array<float,5>,3> 
twitterCounts = { 
     {1,0,0,0,0}, 
     {0,2,0,0,0}, 
     {0,0,3,0,0} 
}; 

const std::array<std::array<float,5>,3> 
TwitterLiveData::data() { 
    return twitterCounts; 
} 

Vous ne voulez pas revenir le tableau en valeur car cela pourrait potentiellement être trop cher. Vous pouvez retourner une référence au tableau à la place:

const std::array<std::array<float,5>,3> &TwitterLiveData::data(); 

Dans les deux cas votre syntaxe désirée float x = TwitterLiveData::data()[1][1]; de travaux.

+0

J'aime ça, merci très simple. – user1356937