【问题标题】:"error: request for member ‘size’ in ‘a’, which is of pointer type" but I didn't think it was a pointer“错误:在‘a’中请求成员‘size’,它是指针类型”但我不认为它是指针
【发布时间】:2014-05-20 06:16:38
【问题描述】:

所以,我以为我正在尝试做一些简单的事情,但显然不是......

我编写了这个函数,以便以后可以扩展它,并且可以在需要时通过 menu(mystrings) 快速为用户提供菜单:

int menu(string a[]) {
    int choice(0);
    cout << "Make a selection" << endl;
    for(int i=0; i<a.size(); i++) {
        cout << i << ") " << a[i] << endl;
    }
    cin >> choice;
    cout << endl;
    return choice;
}

但由于某种原因,我得到了:

main.cpp: In function ‘int menu(std::string*)’:
main.cpp:38:12: error: request for member ‘size’ in ‘a’, which is of pointer type ‘std::string* {aka std::basic_string<char>*}’ (maybe you meant to use ‘->’ ?)
  int n = a.size();

当我尝试编译时。谁能帮我翻译一下这个错误并解释-&gt;是什么,谢谢。

【问题讨论】:

  • 数组不是类。他们没有成员函数。根据您的需要使用std::arraystd::vector
  • 我猜你在做using namespace std;
  • 所有反对票是怎么回事?这并不清楚,也不一定是缺乏努力/研究;这是关于 C++ 最尴尬的事情之一。
  • @T.J.Crowder 非常感谢,我也想知道我做错了什么,是否有人反对请让我知道我将来如何改进我的问题?当我没有要求指针时,我对错误说我有一个指针感到非常困惑。
  • 代码中的string a[]syntax quirk,代码的行为就好像你在那里写了string *a

标签: c++ arrays


【解决方案1】:

您正在传递一个 strings 数组并尝试在该数组上调用 size()。数组在传递给函数时退化为指针,这解释了您的错误。

-&gt; 运算符或“箭头运算符”(我使用的名称)只是 (*obj).func() 的简写。如果您有指向类对象的指针,这将很有用。示例:

string *s = &someotherstring;
s->size(); //instead of (*s).size(), saves keystrokes

【讨论】:

  • 不退化,退化。无论如何都充满了。
  • 能否麻烦您提供更多信息?我不习惯使用指针,我将如何使用 -&gt; 运算符,它是否有名称以便我可以了解更多信息?谢谢。
  • 您在函数参数中声明的 @JamieTwells string a[]string * const a 完全相同。顺便说一句,数组没有size 字段。所以我很困惑你想要得到什么。我认为您必须明确接收 n(数组中的元素数)作为参数。写 a->size 相当于 a[0].size 这不是你想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多