2012-04-25 121 views
3

我试图定义和C使用2D阵列++静态2D阵列

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

返回这样的:

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

和使用它像这样

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

什么是静态访问器的正确签名?

+3

只使用一个矢量就容易多了。这有可能吗? – chris 2012-04-25 18:10:52

回答

5

您不能返回数组,但可以将指针返回到其第一个元素或对该数组的引用。你必须把正确的类型签名:

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

或许

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

这解决了我的感谢! – user1356937 2012-04-25 18:24:23

0

它取决于你的编译器,但大多数情况下双数组的名字被视为双指针。 所以在你的情况下,twitterCounts是一个float **。

+3

不正确。 'twitterCounts'永远不会是'float **',但是作为float [5]类型的数组,它会衰减成一个指向'float [5]'的类型的指针。所以'twitterCounts'“是一个”(衰减)'浮动(*)[5]' – Anthales 2012-04-25 18:17:07

3

参见:https://stackoverflow.com/a/10264383/365496

摘要:

#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; 
} 

你可能不希望返回按价值排列的数组可能会过于昂贵。你可以参考返回数组来代替:

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

在这两种情况下,你想要的语法float x = TwitterLiveData::data()[1][1];作品。

+0

我喜欢这个,很简单,谢谢。 – user1356937 2012-04-25 18:23:49