错误:请求 中的成员"大小",其非类类型为"int*"



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

错误:请求"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;
}
};

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

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

int isbn[20];

带有

std::vector<int> isbn;

并相应地增长矢量。使用std::string代替char阵列。

正如错误消息所说,int*没有成员函数size()。你必须用另一种方式来确定尺寸。

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

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

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

int xs[5];

你可以使用

  1. sizeof(xs)/sizeof(xs[0])
  2. std::size(xs)

注意,std::size是C++17的一个特性。

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

不能将size((与常规数组一起使用,使用size((必须使用std::vector,它是STL的容器。对于使用数组初始化矢量,请使用:vector<int> vec(isbn,isbn+20)

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

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

Thanx

最新更新