【发布时间】:2015-09-15 16:54:38
【问题描述】:
我一直在尝试创建一个函数getLocation(),它利用指针返回Character 类中声明的结构Location 的值。我很好奇我的语法(或我的结构)的问题。知道星号* 应该引用该值,为什么我使用与符号string& Character::getInventory 的函数能够返回该特定索引的值(其返回不需要转换)?
正在尝试Location& Character::getLocation() {return position; }
当运行结果为error C2679: binary '<<': no operator found
也不是
Location*
由于没有转换,因此无法运行。
我读到以下可能是最合适的,因为它指定了结构所在的范围,但仍然导致需要并返回一个临时的。
Character::Location* const & Character::getLocation() {return &position; }
任何建议或意见将不胜感激,在此先感谢。
下面是我的main.cpp,当然会显示Location的十六进制地址。
#include <iostream>
#include <string>
using std::cerr;
using std::cin;
using std::cout;
using std::endl;
using std::string;
class Character {
private:
string name;
string inventory[4];
public:
struct Location {
int x; int y;
};
Location position;
public:
void Character::setName(string x) { name = x; }
string Character::getName() { return name; }
void Character::setLocation(int x, int y) {
position.x = x; position.y = y;
}
Location* Character::getLocation() {return &position; }
void Character::setInventory(string(&x)[4]) { for (int i = 0; i < 4; ++i) { inventory[i] = x[i]; } }
string& Character::getInventory(int itemNumber) { return inventory[itemNumber]; }
};
void showUser(Character Character);
int main() {
try {
string items[4] = { "Sword", "Shield", "Potion", "Cloak" };
Character CharacterI;
CharacterI.setName("Some Character");
CharacterI.setInventory(items);
CharacterI.setLocation(1, 30);
cout << "\n" << "Retrieving Character Info..." << "\n" << endl;
showUser(CharacterI);
}
catch (std::exception & e) {
cerr << "\nError : " << e.what() << '\n';
}
system("pause");
return 0;
}
void showUser(Character character) {
cout << "Name : " << character.getName() << endl;
cout << "Location : " << character.getLocation() << endl;
for (int i = 0; i < 4; ++i) {
cout << "Inventory " << i + 1 << " : " << character.getInventory(i) << endl;
}
}
【问题讨论】:
-
将其移至评论而不是答案,因为它并没有真正回答您的问题:您的函数
getLocation和setLocation创建struct Location的临时实例,每个实例在函数返回。您需要创建一个成员变量来保存角色的位置,然后从该变量中设置/获取。 -
你声称想做一些非常简单的事情,然后你贴出一堵代码墙。请发布一个小型、独立的代码示例,说明您要解决的问题。
-
@Carlton 想要回答这个问题吗?这是正确的。其实我看到这是一个答案,你删除了它。为什么?
-
我在写完之后重新阅读了 OP,并决定虽然我的答案可能是正确的,但它似乎并没有真正回答这个问题,这似乎是关于功能被转换。如果您认为合适,我会重新发布作为答案。
-
我第二个@juanchopanza。尝试一个包含 int 的普通类。具体理解,虽然是的,
*在 表达式 中表示“值”(即取消引用地址),但在 表达式中表示相反的意思i>声明。这是因为 C's/C++ 的声明语法模仿表达式并显示 您需要对声明的标识符执行什么操作 以获取基本类型,此处为Location。如果您需要取消引用标识符,则标识符表示一个指针(类似的东西)。
标签: c++ function class pointers struct