Проблема С Классом

Тема в разделе "Общие вопросы по С и С++", создана пользователем FeDoS, 3 ноя 2012.

  1. FeDoS

    FeDoS Гость

    Здравствуйте!
    Пытаюсь объявить класс в отдельном файле, но при компиляции получаю ошибку.
    Код (C++):
    //main.cpp
    #include "test.h"
    #include <iostream>
    int main()
    {
    Test_class test;
    test.message();
    test.message2();
    test.message3();
    system("pause");
    }
    Код (C++):
    //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;
    }
    Код (C++):
    //test.h
    class Test_class
    {
    public:
    void message();
    void message2();
    void message3();
    };
    Компилирую в dev c++
    Ошибка:
    multiple definition of `Test_class::message()'
    А если сделать в таком варианте всё работает:
    Код (C++):
    //main.cpp
    #include "test.h"
    #include <iostream>

    int main()
    {
    Test_class test;
    test.message();
    test.message2();
    test.message3();
    system("pause");
    }
    Код (C++):
    //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;
    }
    };
     
  2. Whatka

    Whatka Well-Known Member

    Регистрация:
    9 окт 2011
    Сообщения:
    433
    Симпатии:
    4
    так во втрорм варианте у тебя класс и так в отдельном файле.
    в VS эти 3 файла будут работать
     
  3. FeDoS

    FeDoS Гость

    Whatka, вы правы, в VS проект собирается.
    Проблема решилась, но причина так и осталась для меня загадкой.
    Я создал новый проект, но класс и методы писал не вручную, а добавил их на вкладке классы и получил код:
    Код (C++):
    //main.cpp
    #include <conio.h>
    #include "test_class.h"
    #include <iostream>

    using namespace std;

    int main()
    {
    Test_class test;
    test.message();
    test.message2();
    test.message3();
    system("pause");
    }
    Код (C++):
    //test_class.cpp
    // Class automatically generated by Dev-C++ New Class wizard

    #include "test_class.h" // class's header file
    #include <iostream>

    using namespace std;

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

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

    // No description
    void Test_class::message3()
    {
    cout << "Message number 3" << endl;
    }
    Код (C++):
    //test_class.h
    // Class automatically generated by Dev-C++ New Class wizard

    #ifndef TEST_CLASS_H
    #define TEST_CLASS_H

    /*
    * No description
    */

    class Test_class
    {
    public:
    // No description
    void message3();
    // No description
    void message2();
    // No description
    void message();
    };
    #endif // TEST_CLASS_H
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    обрати внимание на:
    Код (Text):
    #ifndef TEST_CLASS_H
    #define TEST_CLASS_H
    Добавлено: хотя, можно и не обращать внимание )
    первый код тоже верный.
    multiple definition вываливается если что-то несколько раз описывается, это может быть, например, если вы несколько раз включите один и тот же хедер в одну единицу трансляции (это случается чуть чаще чем постоянно в проектах чуть больше вашего), и директива #ifndef как в вашем случае или #pragma once (лучше используйте #ifndef ..) спасают от этого. Но у вас и в первом посте нет множественного включения хедера, там все верно, вроде бы.
     
Загрузка...
Похожие Темы - Проблема Классом
  1. c0de3r
    Ответов:
    5
    Просмотров:
    119
  2. DobermannTT
    Ответов:
    10
    Просмотров:
    134
  3. SoulPaladin
    Ответов:
    4
    Просмотров:
    128
  4. Artael
    Ответов:
    1
    Просмотров:
    109
  5. ENSLER
    Ответов:
    0
    Просмотров:
    102

Поделиться этой страницей