返回类型不被接受?

时间:2015-12-15 11:12:52

标签: c++

这是我的代码

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

3 个答案:

答案 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;
}