Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误:请求成员';尺寸';在'';,属于非类类型';int*';_C++_Class - Fatal编程技术网

C++ 错误:请求成员';尺寸';在'';,属于非类类型';int*';

C++ 错误:请求成员';尺寸';在'';,属于非类类型';int*';,c++,class,C++,Class,我不知道为什么我现在有这个问题 错误:请求“isbn”中的成员“size”,该成员属于非类类型“int*” 我试图得到isbn中有多少个元素(整数) 教材{ 受保护的: 国际标准书号[20]; 字符标题[50]; char作者[30]; 浮动基本价格; 公众: 书籍(int*isbn=0,const char*title=“”,const char*author=“”,float basic_price=0) { //这方面的问题是: 对于(int i=0;iisbn[i]=isbn[i]; s

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

错误:请求“isbn”中的成员“size”,该成员属于非类类型“int*”

我试图得到isbn中有多少个元素(整数)

教材{
受保护的:
国际标准书号[20];
字符标题[50];
char作者[30];
浮动基本价格;
公众:
书籍(int*isbn=0,const char*title=“”,const char*author=“”,float basic_price=0)
{
//这方面的问题是:
对于(int i=0;iisbn[i]=isbn[i];
strcpy(此->标题,标题);
strcpy(这个->作者,作者);
该->基本价格=基本价格;
}
};

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

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


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

< P>,数组没有一个<代码> siz()/<代码>方法。< /P> 一英里之内你能做的最好的事情就是替换

int isbn[20];

标准:向量isbn;
并相应地增加向量。使用
std::string
代替
char
数组。

如果要获取C样式数组中的元素数,可以使用两个选项。例如

int xs[5];
你可以用任何一种

  • sizeof(xs)/sizeof(xs[0])
  • std::size(xs)
  • 注意,这是C++17的一个特性

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

    您不能将size()用于常规数组,要使用size(),必须使用STL容器std::vector。 要使用数组初始化向量,请使用:
    vector-vec(isbn,isbn+20)

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

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

    Thanx

    对于
    int*
    .size()
    ,您希望得到什么?isbn变量中有多少元素“我不知道为什么我现在有这个问题!”这需要一些练习,但您要做的是阅读错误消息并尝试理解它告诉您的内容。我猜是有人或某事让您相信存在名为
    size()的成员函数
    对于您正在使用它的类型。使用将很好地代替
    char
    @MikeCAT:Done!而
    std::array
    对于固定大小,可能
    isbn
    是一个很好的候选者,其他的可能不需要您编写
    this->isbn
    ,而不是
    isbn
    ,在这种情况下。这些方法不适用于指针。@MikeCAT I忽略了一个事实,即他有一个与成员变量同名的函数参数。如果输入数组的大小在这里很重要,即它可以小于成员的大小,OP应该只传递输入大小作为附加参数。这就是C中的操作,如果他使用的是C数组,这看起来像是一个合适的解决方案谨慎。
     for(int i=0; isbn[i]; i++)