На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> error LNK2005, исправление. , Якобы уже определен класс
    В Visual C++ 6 необходимо разбить программу на ООП на файлы, так, чтобы один файл (*.h) содержал сам класс, аналогичный *.cpp файл содержал функции этого класса.
    Когда всё в одном файле, то всё работает, при разбиении на файлы (для начала я выношу один класс, остальный пока не трогаю), то возникают ошибки:

    ExpandedWrap disabled
      Kursach.obj : error LNK2005: "public: __thiscall Chelovek::Chelovek(char *,char *,char *)" (??0Chelovek@@QAE@PAD00@Z) already defined in Chelovek.obj
      Kursach.obj : error LNK2005: "public: __thiscall Chelovek::Chelovek(char *)" (??0Chelovek@@QAE@PAD@Z) already defined in Chelovek.obj
      Kursach.obj : error LNK2005: "public: __thiscall Chelovek::Chelovek(void)" (??0Chelovek@@QAE@XZ) already defined in Chelovek.obj


    При это, есть файл Chelovek.h с таким содержанием:
    ExpandedWrap disabled
      #ifndef CHELOVEK_H
      #define CHELOVEK_H
      #include <fstream.h>
       
      class Chelovek
      {
      protected:
          char Name[15];
          char Family[15];
          char Otchestvo[15];
      public:
          int ID;
          Chelovek(char *Nm,char *Fm,char *Ot);
          Chelovek(char *Fm);
          Chelovek();
          ~Chelovek(){};
          virtual void print()= 0;// Чистая виртуальная функция
          virtual int fwrite()= 0;
          virtual int Fwrite(fstream f)= 0;// Чистая виртуальная функция
          virtual int fread()=0;// Чистая виртуальная функция
          virtual int Fread(ifstream f)= 0;
      };
       
      #endif

    А файл Chelovek.cpp имеет такое содержание:
    ExpandedWrap disabled
      #include "Chelovek.h"
      #include <string.h>
      Chelovek::Chelovek(char *Nm,char *Fm,char *Ot)
      {
          ID=0;
          strcpy(Name,Nm);
          strcpy(Family,Fm);
          strcpy(Otchestvo,Ot);
      }
       
      Chelovek::Chelovek(char *Fm)
      {
          ID=0;
          strcpy(Family,Fm);
      }
       
      Chelovek::Chelovek()
      {
          char *y;
          y="";
          ID=0;
          strcpy(Name,y);
          strcpy(Family,y);
          strcpy(Otchestvo,y);
      }

    А в основном файле просто инклудится Chelovek.cpp.
    Насколько, как мне кажется, проблема скорее всего в h файле, и, насколько я знаю, за это отвечают первые две строки...
    Но не понимаю почему такая проблема возникает(((
    Подскажите пожалуйста, что именно нужно добавить или убрать, чтобы не возникало такой ошибки.
    Мне кажется что проблема не очень сложная (я даже ни на этом, ни на нескольких других форумах) не нашёл ответа на этот вопрос, но не очень хорошо разбираюсь в С++.

    Заранее всем спасибо.
    Сообщение отредактировано: антиКИЛЛЕР -
      // h
      #include <fstream>

      class Chelovek
      {
      private:
      char Name[15];
      char Family[15];
      char Otchestvo[15];
      public:
      int ID;
      Chelovek(char *Nm,char *Fm,char *Ot);
      Chelovek(char *Fm);
      Chelovek();
      ~Chelovek(){};
      virtual void print()= 0;// Чистая виртуальная функция
      virtual int fwrite()= 0;
      virtual int Fwrite(std::fstream f)= 0;// Чистая виртуальная функция
      virtual int fread()=0;// Чистая виртуальная функция
      virtual int Fread(std::ifstream f)= 0;
      };

      //cpp
      #include "Chelovek.h"
      #include <string.h>
      Chelovek::Chelovek(char *Nm,char *Fm,char *Ot)
      {
      ID=0;
      strcpy(Name,Nm);
      strcpy(Family,Fm);
      strcpy(Otchestvo,Ot);
      }

      Chelovek::Chelovek(char *Fm)
      {
      ID=0;
      strcpy(Family,Fm);
      }

      Chelovek::Chelovek()
      {
      char *y;
      y="";
      ID=0;
      strcpy(Name,y);
      strcpy(Family,y);
      strcpy(Otchestvo,y);
      }

      попробуй
      Сообщение отредактировано: Juni -
        Juni,
        Так к сожалению, тоже не работает.
        Выскакивает всего 58 ошибок, начинающихся с таких:
        ExpandedWrap disabled
          f:\институт\курсовая тех прог\kursach\chelovek.h(17) : error C2653: 'std' : is not a class or namespace name
          f:\институт\курсовая тех прог\kursach\chelovek.h(19) : error C2653: 'std' : is not a class or namespace name
          F:\ИНСТИТУТ\Курсовая Тех прог\Kursach\Kursach.cpp(173) : error C2248: 'Name' : cannot access private member declared in class 'Chelovek'
                  f:\институт\курсовая тех прог\kursach\chelovek.h(6) : see declaration of 'Name'

        Далее список ошибок приводить не буду, т.к. они относятся к тому, что программа не может получить доступ к данным private.

        В случае, если просто убрать такие строки:
        ExpandedWrap disabled
          #ifndef CHELOVEK_H
          #define CHELOVEK_H
          ...
          #endif

        то возникает ошибка открытия файла Chelovek.obj:
        ExpandedWrap disabled
          LINK : fatal error LNK1104: cannot open file ".\Debug\Chelovek.obj"
          Error executing link.exe.
          По ходу компилятор переглючил. Сейчас запустил и теперь уже находится Chelovek.obj и возникают те же самые ошибки error LNK2005.
            Цитата антиКИЛЛЕР @
            А в основном файле просто инклудится Chelovek.cpp.
            Насколько, как мне кажется, проблема скорее всего в h файле,

            Проблема в том, что ты инклудишь .cpp-файл. Так не делается.
            Добавляй .cpp в проект и всё, инклудь где нужно только .h-файл
              Hryak,
              Браво! Да действительно, проблема была именно в этом!!
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0319 ]   [ 16 queries used ]   [ Generated: 21.06.25, 04:33 GMT ]