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

redefinition of class - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.71
Drus
 Аватар для Drus
57 / 57 / 1
Регистрация: 07.10.2011
Сообщений: 203
05.12.2011, 10:57     redefinition of class #1
Даже не могу предположить что не так, наверняка ошибка глупая, подскажите подалуйста

ASTManage/SvcHandler.h:27:9: error: redefinition of ‘class CAST::SvcHandler’
ASTManage/SvcHandler.h:27:9: error: previous definition of ‘class CAST::SvcHandler’
ASTManage/SvcHandler.h:74:9: error: redefinition of ‘class CAST::SockHandler’
ASTManage/SvcHandler.h:74:9: error: previous definition of ‘class CAST::SockHandler’

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
//This is the ACE client service handler
//code here will use ACE Reactor model
//This part of code require ACE
 
#ifndef SVCHANDLER_H
#define SCVHANDLER_H
 
//ACE includes
#include "ace/Synch_Traits.h"
#include "ace/Null_Condition.h"
#include "ace/Null_Mutex.h"
#include "ace/Message_Block.h"
#include "ace/Reactor.h"
#include "ace/INET_Addr.h"
#include "ace/SOCK_Stream.h"
#include "ace/SOCK_Connector.h"
#include "ace/Connector.h"
#include "ace/Svc_Handler.h"
#include "ace/Reactor_Notification_Strategy.h"
 
//STL includes
#include <string>
class SvcHandler;
 
namespace CAST 
{
  class SvcHandler: public ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_MT_SYNCH> //ACE_MT_SYNCH
    {
      typedef ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_MT_SYNCH> super;
      
    public:
      SvcHandler() : notifier_ (0, this, ACE_Event_Handler::WRITE_MASK),
    reply_queue_(NULL),event_queue_(NULL) {};
    ;
      int open (void * = 0);
      
      /* This function will reading all the packages comming  
       * Both reply messages and event messages are recieved here
       * and dispatched to different queue accordingly
       */
      virtual int handle_input (ACE_HANDLE fd = ACE_INVALID_HANDLE); 
      
      /* Instead of doing a send directly on the public sending calls
       * exposed by Called when output queue has item and send is possible.
       * This call basically is doing a flow-controled sending 
       */
      virtual int handle_output (ACE_HANDLE fd = ACE_INVALID_HANDLE);
    
      /* This is the time event handler 
       *It calls ping method to keep the connection alive
       */
      virtual int handle_timeout(const ACE_Time_Value &current_time, const void *act=0);
 
      // Called when this handler is removed from the ACE_Reactor.
      virtual int handle_close (ACE_HANDLE handle,
                    ACE_Reactor_Mask close_mask);
 
      void set_msg_queues(ACE_Message_Queue<ACE_MT_SYNCH>* reply_queue,
              ACE_Message_Queue<ACE_MT_SYNCH>* event_queue)
      {
    reply_queue_ = reply_queue;
    event_queue_ = event_queue;
      };
 
    private:
      ACE_Reactor_Notification_Strategy notifier_;
      ACE_Message_Queue<ACE_MT_SYNCH>* reply_queue_;
      ACE_Message_Queue<ACE_MT_SYNCH>* event_queue_;
 
 
      std::string recv_buf_;
    };
 
  class SockHandler : public ACE_Task<ACE_MT_SYNCH>
  {
  public:
    SockHandler(){};
    int init(const char address[]);
    int send_msg(const char* msg); //NULL terminated string.
    char* get_reply(); //user of this call is reponsible for the memory
    void get_reply(char* buf);
    char* get_event(); //user is responsible for the memory
    void get_event(char* buf);
 
    
 
    int svc( );
 
  private:
    
    ACE_INET_Addr ast_addr_;
    ACE_Connector<SvcHandler, ACE_SOCK_CONNECTOR> connector_;
    SvcHandler client_handler_;
    ACE_Message_Queue<ACE_MT_SYNCH> event_queue_; 
    //this queue is the event queue
    //the message queue inherited from the taskbase will be the reply queue.
    
  };
};
#endif /* __CLIENTSERVICE_H_ */
единственно что смущает - это объект типа класса в теле, а больше я ине знаю подо что копать можно
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.12.2011, 11:01     redefinition of class #2
Drus, Страж включения напишите и не будет ошибки.
Drus
 Аватар для Drus
57 / 57 / 1
Регистрация: 07.10.2011
Сообщений: 203
05.12.2011, 11:08  [ТС]     redefinition of class #3
натыкался на стража, по этой ошибке, но занчения не предал
Спс, загуглил, сходил, просветился.

Остался вопрос почему тогда в этой ситуации недостаточно "ifndef"
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.12.2011, 11:10     redefinition of class #4
Drus, Гм. Я собственно лоханулся. Не заметил у вас стража. По данному коду ничего сказать нельзя. В нем той ошибки которую вы выложили нет

Добавлено через 1 минуту
Собственно проблема в другом.
У вас предварительное объявление класса находится вне пространства имен. Итого - это два разных класа.
Drus
 Аватар для Drus
57 / 57 / 1
Регистрация: 07.10.2011
Сообщений: 203
05.12.2011, 11:15  [ТС]     redefinition of class #5
мне сейчас посоветовали впредь оба варианта в заголовках писать, во избежании гемороя.

По предварительному объявлению - не туда вставил, да поправил, спс
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
05.12.2011, 11:18     redefinition of class #6
Drus, А что значит "оба"? #ifndef и последующее это как бэ и есть страж включения.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2011, 11:42     redefinition of class
Еще ссылки по теме:

Работа с class ами. Заполнение дин. массива типа class C++
C++ Create a programm that creates an object of created class Time and tests the member functions of class
C++ Error C2374: 'i' : redefinition; multiple initialization

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

Или воспользуйтесь поиском по форуму:
Drus
 Аватар для Drus
57 / 57 / 1
Регистрация: 07.10.2011
Сообщений: 203
05.12.2011, 11:42  [ТС]     redefinition of class #7
C++
1
2
#ifndef
#pragma once
там всего 4 файла для включения у либы, проще написать, чем разбираться почему не работает #ifndef. скомпилилось и косяки более не лезут. На счет почему оно так - предкомпилятор теряет константу, а причина - товарисч сказал "не знаю", с такой же ошибкой на Visual бился

Добавлено через 12 минут
ответ банален:
C++
1
2
#ifndef SVCHANDLER_H
#define SCVHANDLER_H
это разные константы =)
Yandex
Объявления
05.12.2011, 11:42     redefinition of class
Ответ Создать тему
Опции темы

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