У меня проблема с моим собственным классом и оператором =. Когда я пытаюсь приписать одному объекту класса Cow другой один из того же класса за пределами некоторой функции, я получаю информацию «Это объявление не имеет класса хранения или спецификатора типа в C++». В чем проблема? Прошу прощения за мой английский.«У этого объявления нет класса хранения или спецификатора типа в C++»
#include "Header.h"
Cow cow5;
Cow cow6;
cow5 = cow6;
int main()
{
Cow cow1;
Cow cow2("cowa22", "hobby", 8);
Cow cow3 = cow2;
Cow cow4;
cow2.operator=(cow3);
}
#include "Header.h"
#include <string>
#include <iostream>
Cow::Cow()
{
strcpy_s(name, sizeof(char)*20, "unnamed");
hobby = nullptr;
weight = 0;
}
Cow::Cow(const char * nm, const char * ho, double wt)
{
strcpy_s(name, sizeof(char) * 20, nm);
hobby = new char[strlen(ho) + 1];
strcpy_s(hobby, sizeof(char)*(strlen(ho)+1), ho);
weight = wt;
}
Cow::Cow(const Cow & c)
{
strcpy_s(name, sizeof(char) * 20, c.name);
hobby = new char[strlen(c.hobby) + 1];
strcpy_s(hobby, sizeof(char)*(strlen(c.hobby) + 1), c.hobby);
weight = c.weight;
}
Cow::~Cow()
{
delete[] hobby;
}
Cow & Cow::operator=(const Cow & c)
{
if (&c == this)
return *this;
delete[] hobby;
strcpy_s(name, sizeof(char) * 20, c.name);
hobby = new char[strlen(c.hobby) + 1];
strcpy_s(hobby, sizeof(char)*(strlen(c.hobby) + 1), c.hobby);
weight = c.weight;
return *this;
}
void Cow::ShowCow() const
{
std::cout << "Name: " << name << std::endl
<< "Hobby: " << hobby << std::endl
<< "Weight: " << weight << std::endl;
}
Вы вставили .cpp дважды вместо .h и .cpp – Borgleader
Просто стилистический комментарий. Не используйте массивы символов в C++, которые указывают использование вами 'strcpy_s', вместо этого используйте' std :: string'. –