Компилятор C ++ не распознает функцию-член и тип - PullRequest
1 голос
/ 28 ноября 2010

Сегодня день странных вещей .... Получил глупый файл hpp и другой тупой файл cpp, пытаясь реализовать глупый класс. Вот они:

// HPP

#ifndef _WFQUEUE_MANAGER_PROXY_HPP_
#define _WFQUEUE_MANAGER_PROXY_HPP_

#include <iostream>
#include <string>

#include "workflow.hpp"
#include "wfqueue.hpp"

//-----------------------------------------------------------------------------
// Enum, struct, aliases
namespace middleware {
typedef struct {
    std::string proxy_ipaddr; /* IP address to manager */
    std::string proxy_port; /* Port to manager */
} WFProxyConfig;
}
//-----------------------------------------------------------------------------
// Class definitions
namespace middleware {
/*!
 * This class provides network interface to access the workflow queue. It is
 * important to notice that constructor is private in order to let a factory
 * perform such a work.
 */
class WFQueueManagerProxy : public WFQueue {
    /*!
     * To let factory build properly this object, we provide access to every
     * part of it.
     */
    friend class WFQueueProxyFactory;
private:
    /*!
     * Privately constructs the object. Default configuration with loopback
     * address and invalid port.
     */
    WFQueueManagerProxy();
public:
    /*!
     * Destructor
     */
    ~WFQueueManagerProxy();
    /*!
     * Enqueues a workflow.
     */
    void enqueue(const Workflow& workflow);
    /*!
     * Dequeues a workflow.
     */
    const Workflow& dequeue();
private:
    /*!
     * Privately constructs the object. Assigning configuration.
     */
    void ConfigureProxy(WFProxyConfig conf);
    /*!
     * Parameters for proxy.
     */
    WFProxyConfig _config;
}; /* WFQueueManagerProxy */
} /* middleware */

#endif

Здесь другой

// CPP

#include "wfqueue_manager_proxy.hpp"

using namespace middleware;

//-----------------------------------------------------------------------------
// Constructors and destructor
/* Private constructor */
WFQueueManagerProxy::WFQueueManagerProxy() {
    (this->_config).proxy_ipaddr = "127.0.0.1";
    (this->_config).proxy_port = "0";
}
/* Destructor */
WFQueueManagerProxy::~WFQueueManagerProxy() {

}
//-----------------------------------------------------------------------------
// Public members
/* Enqueue */
void WFQueueManagerProxy::enqueue(const Workflow& workflow) {

}
/* Dequeue */
const Workflow& WFQueueManagerProxy::dequeue() {

}
//-----------------------------------------------------------------------------
// Private members
void WFQueueManagerProxy::ConfigureProxy(WFProxyConfig conf) {

}

Кто-нибудь, пожалуйста, объясните мне, почему g ++ говорит мне следующее:

wfqueue_manager_proxy.cpp: In конструктор «Промежуточного слоя :: WFQueueManagerProxy :: WFQueueManagerProxy ()»: wfqueue_manager_proxy.cpp: 32: ошибка: 'учебный класс middleware :: WFQueueManagerProxy ’имеет нет члена с именем ‘_config’ wfqueue_manager_proxy.cpp: 33: ошибка: 'учебный класс middleware :: WFQueueManagerProxy ’имеет нет члена с именем ‘_config’ wfqueue_manager_proxy.cpp: в глобальном область действия: wfqueue_manager_proxy.cpp: 51: ошибка: переменная или поле ConfigureProxy объявлен недействительным wfqueue_manager_proxy.cpp: 51: ошибка: WFProxyConfig не был объявлен в эта сфера

ABSURD ... Он не распознает этот typedef и тоже не распознает закрытый член ... и, более чем все ... почему g ++ не распознает функцию-член, пытающуюся увидеть ее как переменную ?????????

Я попробовал все ... PS (тому, кто видел мой предыдущий пост): моя виртуальная машина сейчас не является причиной. Я проверил и получил подтверждение, что ни один виртуальный жесткий диск не поврежден или не столкнулся с другими виртуальными модулями памяти.

Ответы [ 4 ]

5 голосов
/ 28 ноября 2010

Просто предположение. Разве это не должно быть

WFQueueManagerProxy::WFQueueManagerProxy() { 
    (this->_config).proxy_ipaddr = "127.0.0.1"; 
    (this->_config).proxy_port = "0"; 
} 
1 голос
/ 28 ноября 2010

Я получаю сообщение об ошибке при удалении объявления WFProxyConfig (или изменении объявленного имени). Вы уверены, что отправили точный код, который вызывает ошибку?

0 голосов
/ 28 ноября 2010

ОК, это была ошибка .... Я также скомпилировал заголовки ... многие gch были так созданы ... g ++ не обновил эти предварительно скомпилированные заголовки и получил старый код ... поэтому он был безразличен клюбые изменения, которые я сделал ... извините за беспокойство, ребята ... большое спасибо за вашу помощь

0 голосов
/ 28 ноября 2010

Идентификаторы с ведущими символами подчеркивания зарезервированы (включая охранники, а также _config). Я был бы немного удивлен, если одна из них - ваша проблема - но не , что удивило.

_config может даже быть ключевым словом расширения g ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...