错误:在“”中请求成员“大小”,它是非类类型“int *”

Posted

技术标签:

【中文标题】错误:在“”中请求成员“大小”,它是非类类型“int *”【英文标题】:error: request for member 'size' in '', which is of non-class type 'int*' 【发布时间】:2021-05-20 14:18:08 【问题描述】:

我不知道为什么我现在有这个问题!

错误:在“isbn”中请求成员“size”,它是非类类型“int*”

我正在尝试获取isbn 中有多少元素(整数)。

class Book
protected:
    int isbn[20];
    char title[50];
    char author[30];
    float basic_price;
public:
    Book(int *isbn=0,const char *title="",const char *author="",float basic_price=0)
    
 //Problem is in this line:
       for(int i=0;i<isbn.size();i++)
            this->isbn[i]=isbn[i];
        strcpy(this->title,title);
        strcpy(this->author,author);
        this->basic_price=basic_price;
    
;

【问题讨论】:

您希望在int* 上通过.size() 获得什么? isbn 变量中有多少元素 ***.com/questions/37538/… “我不知道为什么我现在遇到这个问题!” 这需要一些练习,但你要做的是阅读错误消息并尝试理解它正在告诉你。我猜某事或某人让你相信存在一些名为 size() 的成员函数,用于你使用它的类型。 【参考方案1】:

在 C++ 中,数组没有 size() 方法。

你能做的最好的事情就是替换

int isbn[20];

std::vector<int> isbn;

并相应地增长向量。使用 std::string 代替 char 数组。

【讨论】:

使用std::string 代替char 的数组会更好。 @MikeCAT:完成! std::array 用于固定大小,也许isbn 是一个很好的候选者,其他的可能不是【参考方案2】:

正如错误消息所说,int* 没有成员函数size()。您必须以另一种方式确定大小。

固定值20(来自成员数组isbn的大小)可能有效,但请注意不要导致超出范围的访问。

另一种选择是添加另一个参数来传递数组中的元素数量。

【讨论】:

【参考方案3】:

如果您想获取 C 样式数组中的元素数量,您有几个选择。例如,对于

int xs[5];

你可以使用任何一个

    sizeof(xs)/sizeof(xs[0]) std::size(xs)

请注意,std::size 是 C++17 功能。

请注意,您需要将变量的类型作为数组引用。如果你只有一个指向第一个数组元素的指针,这将不起作用。因此,在代码示例中,这将适用于类型为int(&amp;)[20]this-&gt;isbn,但不适用于类型为int* 的函数参数isbn

【讨论】:

你必须写this-&gt;isbn,而不是isbn,在这种情况下。这些方法不适用于指针。 @MikeCAT 我忽略了一个事实,即他有一个与成员变量同名的函数参数。如果输入数组的大小在这里很重要,即它可以小于成员的大小,则 OP 应该只将输入大小作为附加参数传递。这就是一个人在 C 中所做的,如果他使用的是 C 数组,这似乎是一个合适的解决方案。【参考方案4】:

您不能将 size() 与传统数组一起使用,要使用 size() 您必须使用 std::vector ,它是 STL 的容器。 使用数组初始化向量:vector&lt;int&gt; vec(isbn,isbn+20)

否则,您可以将代码中的 for 语句替换为:

 for(int i=0; isbn[i]; i++)

感谢

【讨论】:

以上是关于错误:在“”中请求成员“大小”,它是非类类型“int *”的主要内容,如果未能解决你的问题,请参考以下文章

错误:对“ ”中的成员“ ”的请求,它是非类类型“ ”

c ++请求'B'中的成员'A',它是非类类型'C'

请求“m”中的成员“find”,它是非类类型“int”

为啥一个类允许拥有自己的静态成员,而不是非静态成员?

如何从矢量中删除所有项目? C++

浅析在类模版中构建成员函数时,使用memcpy产生的副作用