nkorobkov
@nkorobkov

Переопределение типа class, в чём проблема?

В проекте есть 3 файла: объявление класса в Auto.h, реализация его методов в Auto.cpp и основной код программы в AutoCenter.cpp.

Вот файл класса Auto.h:
#include <iostream>
#include "stdafx.h"
#include "windows.h"
#include <string>

using namespace std;

class Auto {
private:
	int year;
	int ownersNumber;
	string color;
	string brand;
	string model;
public:
	void setYear(int y);
	void setOwnersNumber(int n);
	void setColor(string c);
	void setBrand(string b);
	void setModel(string m);

	int getYear();
	int getOwnersNumber();
	string getColor();
	string getBrand();
	string getModel();

	void displayAll();
};


Вот файл его реализации Auto.cpp:
#include "stdafx.h"
#include "windows.h"
#include "Auto.h"
#include <string>
#include <iostream>

void Auto::setYear(int y) {
	year = y;
}
void Auto::setBrand(string b) {
	brand = b;
}
void Auto::setModel(string m) {
	model = m;
}
void Auto::setColor(string c) {
	color = c;
}
void Auto::setOwnersNumber(int n) {
	ownersNumber = n;
}
int Auto::getYear() {
	return year;
};
int Auto::getOwnersNumber() {
	return ownersNumber;
};
string Auto::getColor() {
	return color;
};
string Auto::getBrand() {
	return brand;
};
string Auto::getModel() {
	return model;
};


Вот основной код:
#include <iostream>
#include "stdafx.h"
#include "windows.h"
#include "Auto.h"
#include "Auto.cpp"
#include <string>

using namespace std;

int main()
{
	Auto auto1;
	auto1.setBrand("Mercedes");
	auto1.setModel("C200");
	auto1.setColor("red");
	auto1.setYear(2005);
	auto1.setOwnersNumber(2);

	system("pause");
    return 0;
}


На этапе компиляции вылетает 27 ошибок, основная причина которых - "Auto: переопределение типа class". Где тут переопределение, я не могу понять? Подскажите, в чём может быть ошибка? Или это VS гребет?
  • Вопрос задан
  • 8045 просмотров
Решения вопроса 1
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Или это VS гребет?

Очень вряд ли)

  1. Не нужно инклудить файлы исходного кода (*.cpp). Объединением объектных файлов в один исполняемый занимается линкер, список файлов для него у вас в *.cproj-файле и так есть.
  2. Содержимое хэдеров нужно оборачивать в include guards или в начале писать директиву компилятора #pragma once (это понимают все популярные современные компиляторы). Такое действие не даст несколько раз заинклудить один и тот же хэдер в одной единице трансляции.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы