Форум программистов, компьютерный форум CyberForum.ru

ошибка в MY_HEADER_H - C++

Восстановить пароль Регистрация
 
120°
12 / 10 / 1
Регистрация: 01.07.2013
Сообщений: 62
01.07.2013, 21:35     ошибка в MY_HEADER_H #1
где ошибка?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#ifndef MY_HEADER_H
#define MY_HEADER_H
#include <iostream>
 
 
class MyClass
{
public:
    MyClass(int x);
    void Show();
 
private:
    int a;
};
 
 
MyClass::MyClass(int x)
{
    std::cout << "В конструкторе" << std::endl;
    a = x;
}
 
void MyClass::Show()
{
    std::cout << a << std::endl;
}
 
 
#endif
MyHeader.obj : error LNK2005: "public: __thiscall MyClass::MyClass(int)" (??0MyClass@@QAE@H@Z) уже определен в Main.obj

MyHeader.obj : error LNK2005: "public: void __thiscall MyClass::Show(void)" (?Show@MyClass@@QAEXXZ) уже определен в Main.obj

fatal error LNK1169: обнаружен многократно определенный символ - один или более

Добавлено через 16 минут
помогите...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2013, 21:35     ошибка в MY_HEADER_H
Посмотрите здесь:

C++ Вылетает ошибка error C2061: синтаксическая ошибка: идентификатор "_TCHAR"
C++ Глупая ошибка, но до сих пор неисправленная ошибка: ";"

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.07.2013, 21:43     ошибка в MY_HEADER_H #2
вынеси реализации в cpp файл, или перед каждой реализацией допиши inline
120°
12 / 10 / 1
Регистрация: 01.07.2013
Сообщений: 62
01.07.2013, 21:50  [ТС]     ошибка в MY_HEADER_H #3
inline помогло. спасибо

только я не понимаю почему без inline ошибки. не объясните?
так то я знаю что это означает что функция будет встроенной...
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.07.2013, 22:07     ошибка в MY_HEADER_H #4
Цитата Сообщение от 120° Посмотреть сообщение
так то я знаю что это означает что функция будет встроенной...
не факт, будет или нет - решает компилятор

Цитата Сообщение от 120° Посмотреть сообщение
только я не понимаю почему без inline ошибки. не объясните?
нет времени объяснять, если коротко то нарушение правила одного определения
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.07.2013, 22:09     ошибка в MY_HEADER_H #5
Цитата Сообщение от 120° Посмотреть сообщение
где ошибка?
В хедерах реализации не пишут. В Main, наверное, пдключен? Получаются реализации в двух файлах.
120°
12 / 10 / 1
Регистрация: 01.07.2013
Сообщений: 62
01.07.2013, 23:20  [ТС]     ошибка в MY_HEADER_H #6
Цитата Сообщение от alsav22 Посмотреть сообщение
В Main, наверное, пдключен?
да, подключен. но ведь у меня .h файл должен один раз подключаться к Main

Цитата Сообщение от 120° Посмотреть сообщение
C++
1
2
#ifndef MY_HEADER_H 
#define MY_HEADER_H

ладно. может со временем пойму
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.07.2013, 01:36     ошибка в MY_HEADER_H #7
Цитата Сообщение от 120° Посмотреть сообщение
да, подключен. но ведь у меня .h файл должен один раз подключаться к Main
Он и подключен один раз. Вот эта защита:
C++
1
2
#ifndef MY_HEADER_H 
#define MY_HEADER_H
работает только в одном файле (это обрабатывает компилятор, который в единицу времени видит только один файл). Т.е., если бы вы сделали в Main два раза #include "MyHeader", то эта защита сработала бы. Ошибку же вам выдаёт компоновщик, который видит все файлы проекта. У вас MyHeader это, если я правильно понял, .cpp файл?

Добавлено через 1 минуту
Отсюда вывод: не пишите реализации в файлах, которые потом будете инклудить к другим файлам.
120°
12 / 10 / 1
Регистрация: 01.07.2013
Сообщений: 62
02.07.2013, 10:56  [ТС]     ошибка в MY_HEADER_H #8
alsav22, я понял

большое спасибо что объяснил

Добавлено через 2 минуты
действительно, когда убираешь из файла MyHeader.cpp строчку #include "MyHeader.h" то все компилируется
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
02.07.2013, 11:19     ошибка в MY_HEADER_H #9
Цитата Сообщение от 120° Посмотреть сообщение
действительно, когда убираешь из файла MyHeader.cpp строчку #include "MyHeader.h" то все компилируется
Вам alsav22 не том говорит.
Цитата Сообщение от alsav22 Посмотреть сообщение
Отсюда вывод: не пишите реализации в файлах, которые потом будете инклудить к другим файлам.
Нужно реализацию класса из файла MyHeader.h перенести в файл MyHeader.cpp. Конкретно вот эти строки:
C++
1
2
3
4
5
6
7
8
9
10
MyClass::MyClass(int x)
{
    std::cout << "В конструкторе" << std::endl;
    a = x;
}
 
void MyClass::Show()
{
    std::cout << a << std::endl;
}
Строку #include "MyHeader.h" в MyHeader.cpp нужно будет вернуть.
120°
12 / 10 / 1
Регистрация: 01.07.2013
Сообщений: 62
02.07.2013, 11:44  [ТС]     ошибка в MY_HEADER_H #10
действительно, когда убираешь из файла MyHeader.cpp строчку #include "MyHeader.h" то все компилируется
Цитата Сообщение от nxtech Посмотреть сообщение
Вам alsav22 не том говорит.
что он написал я понял смысл. это можно так сказать, небольшой эксперимент, чтобы лучше понять

а реализацию я теперь конечно буду писать в .cpp файлах
nxtech
77 / 59 / 2
Регистрация: 26.06.2013
Сообщений: 198
02.07.2013, 12:03     ошибка в MY_HEADER_H #11
Цитата Сообщение от 120° Посмотреть сообщение
а реализацию я теперь конечно буду писать в .cpp файлах
Этого не нужно делать всегда. Зависит от ситуации. И в вашем случае методы вполне можно было оставить inline в заголовке или записать их реализацию в определении класса.
Yandex
Объявления
02.07.2013, 12:03     ошибка в MY_HEADER_H
Ответ Создать тему
Опции темы

Текущее время: 12:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru