我班上有一个字符串数组:
class A
{
string* tab[11];
const string*& getTab();
}
我正在填写
const string& str
我的第一个想法就是:
return tab;
但是G ++告诉我:
从'std :: string **'类型的右值开始无效初始化'const string *&'类型的非const引用
我做错了什么?
我该怎么回事?
提前致谢:)
答案 0 :(得分:2)
string*&
是对字符串指针的引用
但是你想要返回对指向字符串的指针的数组的引用。
所以你应该返回的类型是string**&
(当然它可以是const)。
另一个解决方案是使用类型std::array<class T, std::size_t N>
而不是原始数组,这样你的语法会更清晰:
class A
{
std::array<string*, 11> tab;
const std::array<string*, 11>& getTab();
}
std::array
是一个非常轻量级的原始c-array包装器,因此使用它几乎不会产生任何性能开销。
答案 1 :(得分:1)
最简单的方法是声明一个合适的typedef:
class A
{
typedef string Table[11];
Table tab;
Table& getTab();
};