Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2012, 00:51   #1
Fe_DoS
Пользователь
 
Аватар для Fe_DoS
 
Регистрация: 30.01.2009
Сообщений: 12
По умолчанию Проблема с классом

Здравствуйте!
Пытаюсь объявить класс в отдельном файле, но при компиляции получаю ошибку.
Код:
//main.cpp
#include "test.h"
#include <iostream>
int main()
{
    Test_class test;
    test.message();
    test.message2();
    test.message3();
    system("pause");
}
Код:
//test.cpp
#include <iostream>
using namespace std;
#include "test.h"

Test_class::message()
{
    cout << "Message number 1" << endl;
}

Test_class::message2()
{
    cout << "Message number 2" << endl;
}

Test_class::message3()
{
    cout << "Message number 3" << endl;
}
Код:
//test,h
class Test_class
{
    public:
        void message();
        void message2();
        void message3();
};
Компилирую в dev c++
Ошибка;
prototype for `int Test_class::message()' does not match any in class `Test_class'

А если сделать в таком варианте всё работает:
Код:
//main.cpp
#include "test.h"
#include <iostream>

int main()
{
    Test_class test;
    test.message();
    test.message2();
    test.message3();
    system("pause");
}
Код:
//test.h
#include <iostream>
using namespace std;

class Test_class
{
    public:
        void message()
        {
            cout << "Message number 1" << endl;
        }
        void message2()
        {
            cout << "Message number 2" << endl;
        }
        void message3()
        {
            cout << "Message number 3" << endl;
        }
};

Последний раз редактировалось Fe_DoS; 03.11.2012 в 02:00.
Fe_DoS вне форума Ответить с цитированием
Старый 03.11.2012, 02:19   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:
//test.cpp
#include <iostream>
using namespace std;
#include "test.h"

void Test_class::message()
{
cout << "Message number 1" << endl;
}

void Test_class::message2()
{
cout << "Message number 2" << endl;
}

void Test_class::message3()
{
cout << "Message number 3" << endl;
}
10 символов
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 03.11.2012, 12:56   #3
Fe_DoS
Пользователь
 
Аватар для Fe_DoS
 
Регистрация: 30.01.2009
Сообщений: 12
По умолчанию

pproger, я исправил test.cpp, но теперь другая ошибка.
multiple definition of `Test_class::message()'
Fe_DoS вне форума Ответить с цитированием
Старый 03.11.2012, 13:11   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Верните test.h к первоначальному состоянию (без тел функций).
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 03.11.2012, 13:28   #5
Fe_DoS
Пользователь
 
Аватар для Fe_DoS
 
Регистрация: 30.01.2009
Сообщений: 12
По умолчанию

Сейчас код имеет такой вид:
Код:
//main.cpp
#include "test.h"
#include <iostream>

int main()
{
    Test_class test;
    test.message();
    test.message2();
    test.message3();
    system("pause");
}
Код:
//test.cpp
#include <iostream>
using namespace std;
#include "test.h"

void Test_class::message()
{
    cout << "Message number 1" << endl;
}

void Test_class::message2()
{
    cout << "Message number 2" << endl;
}

void Test_class::message3()
{
    cout << "Message number 3" << endl;
}
Код:
//test.h
class Test_class
{
    public:
        void message();
        void message2();
        void message3();
};
при этом вылетают ошибки:
multiple definition of `Test_class::message()'
first defined here
multiple definition of `Test_class::message2()'
first defined here
multiple definition of `Test_class::message3()'
first defined here
ld returned 1 exit status
[Build Error] [test.exe] Error 1
Fe_DoS вне форума Ответить с цитированием
Старый 03.11.2012, 15:20   #6
Fe_DoS
Пользователь
 
Аватар для Fe_DoS
 
Регистрация: 30.01.2009
Сообщений: 12
По умолчанию

Проблема решена.
лишнее включение test.h в main.h
Fe_DoS вне форума Ответить с цитированием
Старый 04.11.2012, 12:33   #7
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Стражи включения-то в хидере есть?
Код:
#ifndef TEST_H
#define TEST_H

//Тут ваш код

#endif
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема перегрузки операции присваивания с производным классом kenzoxai Общие вопросы C/C++ 1 24.05.2011 15:43
Проблема с классом cyber_NINJA Общие вопросы Delphi 4 27.12.2010 20:41
Проблема с классом Celestia Общие вопросы Delphi 3 03.12.2010 15:40
Проблема с классом _-Re@l-_ Общие вопросы C/C++ 3 23.09.2010 19:15
Проблема с классом list Homer_J_Simpson Общие вопросы C/C++ 4 28.11.2009 22:03