错误:在“”中请求成员“大小”,它是非类类型“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(&)[20]
的this->isbn
,但不适用于类型为int*
的函数参数isbn
。
【讨论】:
你必须写this->isbn
,而不是isbn
,在这种情况下。这些方法不适用于指针。
@MikeCAT 我忽略了一个事实,即他有一个与成员变量同名的函数参数。如果输入数组的大小在这里很重要,即它可以小于成员的大小,则 OP 应该只将输入大小作为附加参数传递。这就是一个人在 C 中所做的,如果他使用的是 C 数组,这似乎是一个合适的解决方案。【参考方案4】:
您不能将 size() 与传统数组一起使用,要使用 size() 您必须使用 std::vector ,它是 STL 的容器。
使用数组初始化向量:vector<int> vec(isbn,isbn+20)
否则,您可以将代码中的 for 语句替换为:
for(int i=0; isbn[i]; i++)
感谢
【讨论】:
以上是关于错误:在“”中请求成员“大小”,它是非类类型“int *”的主要内容,如果未能解决你的问题,请参考以下文章