这是我的代码
char* Item::getsku()const{
return _sku*;
}
头文件
char _sku[MAX_SKU_LEN + 1 ];
char* getsku()const;
我收到错误
Item.cpp: In member function ‘char* sict::Item::getsku() const’:
Item.cpp:54:15: error: expected primary-expression before ‘;’ token
它说这是预期在分号前的主要表达,但它只是一个吸气功能。每次我改变它,我都无法将const char *更改为char
答案 0 :(得分:2)
假设
char _sku[];
然后你需要
return _sku;
.. ..或
return &_sku[0];
但是,我会避免带有前导下划线的变量名称。关于它们的使用有复杂的规则。 What are the rules about using an underscore in a C++ identifier?
已添加:您还遇到const
正确性问题。您正在尝试将非const指针返回到const
对象的内部字符数组(因为您的方法是const)。如果您不希望调用者能够修改数组内容,那么您的返回类型应为const char *
或者,如果您 希望呼叫者能够修改字符,那么getsku
方法不应该是const
。
答案 1 :(得分:0)
我想你想要返回一个指向char的指针,所以我可以想象你变量_sku是一个char *。
*
有两个目的。
对*
的第一次使用是在变量声明中,以准确地说明您声明的变量将成为类型或对象上的指针。
char * str;
int * i;
Object * object;
第二个,在变量前面,类型上的指针,类型并不重要,*
用于取消引用变量并获取对其值的访问权。
int * a;
*a = 7;
我使用*
取消引用'a'并将值(7)设置为由a指向的int。
*
需要一个正确的操作数,这就是您收到此错误的原因:
error: expected primary-expression before ‘;’ token
如果_sku的类型为char *
,则只需编写:
return _sku;
但是如果_sku是一个char并且你想要返回它的地址(它上面有一个指针)你应该写:
return &_sku;
答案 2 :(得分:0)
char* Item::getsku()const{
return _sku;
}
(我在_sku
之后删除了' *'假设这是一个错字)
问题是getsku
是 const 成员函数,因此类Item
的所有成员在其中都被视为const
。由于_sku
是数组的名称,因此它会衰减为指向数组第一个元素的指针,因此可以。但该指针的类型是const char*
,因为这是一个const成员函数。
如果不了解更多有关设计的信息,则无法给出答案,但通常这需要两个成员函数:
const char* Item::getsku() const {
return _sku;
}
和
char* Item::getsku() {
return _sku;
}