【问题标题】:C++ Placing objects in arraysC++ 将对象放入数组
【发布时间】:2017-01-06 06:19:14
【问题描述】:

我正在尝试将对象放入数组列表中,然后弹出 3 个错误。我查看了论坛,有一个类似于我的question,但我认为它不适用于我的情况。 这是我的代码:

在 test.cpp(主文件)中

#include <iostream>
#include "House.h"
using namespace std;

House HouseArray[2];

int main()
{
    string toPrint;
    House Kubo("Kubo", 2);
    HouseArray[0] = Kubo;
    toPrint = HouseArray[0].GetHouseName;
    cout <<toPrint<< endl;

}

在 House.cpp 中

#include "House.h"
#include <iostream>


House::House(string a, int h)
{
    Name = a;
    Health = h;
}
void House::DamageHouse(int d) {
    Health -= d;
    cout << "Your " << Name << " has " << Health << " left."<<endl;
}
int House::GetHouseHealth() {
    return Health;
}
string House::GetHouseName() {
    string returning = Name;
    return returning;
}
House::~House()
{
}

在House.h

#include <string>
using namespace std;
class House
{
    string Name;
    int Health;
public:
    House(string a, int h);
    int GetHouseHealth();
    void DamageHouse(int d);
    string GetHouseName();
    ~House();
};

错误:

  1. 错误 C2512 'House':第 9 行中没有合适的默认构造函数可用 test.cpp
  2. 错误 C3867 'House::GetHouseName':非标准语法;使用“&”来 创建一个指向 第 16 行的成员 test.cpp
  3. 错误 C2679 二进制“=”:未找到采用右手的运算符 'overloaded-function' 类型的操作数(或者没有可接受的 转换)第 16 行中的 test.cpp

【问题讨论】:

  • 你打算调用GetHouseName成员函数吗?而且当你创建一个对象数组时,数组中的元素将是默认构造的,你没有默认构造函数。

标签: c++ visual-studio-2015


【解决方案1】:
  1. 如果你想创建一个这样的数组,你需要一个默认构造函数:House HouseArray[2]; 编译器需要知道如何创建一个空的House,以便初始化初始数组。因此在 House.h 中添加如下内容 House() { Name = ""; Health = 0; }

  2. 要在类上调用函数,您需要添加大括号: toPrint = HouseArray[0].GetHouseName();

  3. 我怀疑上面的方法也能解决这个问题。

【讨论】:

  • 默认 ctor 中的 ah 是什么?
  • 数组的元素是值初始化的,因为它具有静态存储持续时间(因为它是在命名空间范围内定义的)。将其设为局部变量即可解决问题。
  • @acraig5075,抱歉,复制代码时忘记修复那部分,现在修复:它应该是一些有效的默认值
  • std::string已经有默认初始化,做Name = "";是浪费时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-06
  • 2015-01-10
  • 2017-07-20
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多