【发布时间】:2016-10-10 11:33:32
【问题描述】:
我做了这门课
class Person {
public:
Person(const std::string& name, const std::string& email, const std::string& city)
: name(name), email(email), city(city) {
}
bool hasCity() const {
return city.compare("") == 0;
}
void print() const {
std::cout << name + " <" + email + ">";
if(hasCity()){
std::cout << ", " + city;
}
std::cout << std::endl;
}
bool equalTo(const Person& comparedPerson) const {
return email.compare(comparedPerson.email) != 0;
}
bool equalId(std::string comparedId){
return email.compare(comparedId) != 0;
}
const std::string name;
const std::string email;
const std::string city;
};
对我来说有问题的是,当我尝试使用以下方式创建新 Person 时:
const Person& newPerson = (const Person &) new Person(name, email, city);
我收到这个错误
error: invalid cast of an rvalue expression of type 'Person*' to type 'const Person&'
const Person& newPerson = (const Person &) new Person(name, email, city);
我想知道为什么新创建的 Person 是 Person* 而不仅仅是 Person。
【问题讨论】:
-
看看智能指针:
std::unique_ptr和std::shared_ptr。操作分配的内存是一种更好的做法 -
只需做
const Person& newPerson = Person(name, email, city); -
另外,我认为
hasCity的逻辑不正确。现在你正在使用手写检查city == ""(或city.empty()),这意味着没有没有城市。 -
从 C++ 开始时,您可能会发现阅读 good book 很有用。
-
const Person& newPerson = (const Person &) new Person(name, email, city);你从哪里听说这是如何创建对象的?
标签: c++