Довольно простой вопрос, но я не мог найти ответа на этот конкретный вопрос, который меня удивил.
Я получаю строку ошибок при попытке вызвать функцию класса, которая изменяет строку частного класса.
Изменение: я решил проблему - я забыл включить требуемое пространство имен и ссылки на сборки в файл заголовка.
Вот код файла.h:
#ifndef ANIMAL_H
#define ANIMAL_H
class Animal
{
public:
Animal();
~Animal();
string getName();
void setName(string animalName);
private:
string name;
};
#endif
вот класс.cpp:
#include "Animal.h"
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
Animal::Animal()
{
}
Animal::~Animal()
{
}
void Animal::setName(string animalName)
{
name = animalName;
}
string Animal::getName()
{
return name;
}
наконец, вот int main(), где я попытался вызвать функции (я просто получил кучу ошибок при компиляции)
int main()
{
Animal chicken;
chicken.setName("gary");
cout << chicken.getName() << endl;
_getch();
}
Сообщения об ошибках включают:
error C2061: syntax error: identifier 'string'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
'error C2146: syntax error : missing ';' before identifier 'getName''
Похоже, вы забыли включить <string>
в свой заголовок. Строковый объект также живет в пространстве имен std
поэтому вам нужно предоставить полное имя для его использования (не добавляйте, using namespace
в заголовки).
#ifndef ANIMAL_H
#define ANIMAL_H
#include <string> // You need to include this
class Animal
{
public:
Animal();
~Animal();
std::string getName();
void setName(std::string animalName);
private:
std::string name;
};
#endif
В заголовке класса отсутствует объявление библиотеки строк и std :: перед каждым объявлением строки.
#ifndef ANIMAL_H
#define ANIMAL_H
#include <string>
class Animal
{
public:
Animal();
~Animal();
std::string getName();
void setName(std::string animalName);
private:
std::string name;
};
#endif
@edit Up
Ты подтолкнул меня на это! Ваш ответ появился, только когда я опубликовал свой