Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 16.04.2018, 14:38   #1
marluna
Пользователь
 
Регистрация: 15.12.2016
Сообщений: 42
Репутация: 10
По умолчанию warning C4091

Код:

#pragma once

#include "CommonLogic/ServerTabfileLoader.h"
#include "System/Collections/KMapByVector.h"
#include "CommonLogic/GlobalFunction.h"


template <class TManager, class TKeyType1, class TKeyType2, class TConfig, int NGroupNum=128, int NListNum=128>
class CCfg2KeyMgrTemplate : public KSingleton<TManager>
{
public:
	static const int STEP_DIV = 4;
	typedef KMapByVector<TKeyType2, TConfig*> TDataList;
	typedef struct SDataListNode : public System::Memory::KPortableStepPool<SDataListNode, NGroupNum>
	{
		SDataListNode() : DataList(NListNum, NListNum/STEP_DIV) {}
		TDataList DataList;
	};
	typedef KMapByVector<TKeyType1,SDataListNode*> TDataMap;

public:
	CCfg2KeyMgrTemplate() : m_DataMap(NGroupNum, NGroupNum/STEP_DIV) {}
	~CCfg2KeyMgrTemplate() { this->Clear(); }

public:
	BOOL LoadTable(const char* pFilePath);

	const TDataList* GetGroup(const TKeyType1& keyValue) const
	{
		typename TDataMap::const_iterator iter = m_DataMap.find(keyValue);
		if (iter != m_DataMap.end())
		{
			return &(iter->second->DataList);
		}
		return NULL;
	}

	const TConfig* GetConfig(const TKeyType1& key1, const TKeyType2 key2) const
	{
		const TDataList* pList = GetGroup(key1);
		if (pList)
		{
			typename TDataList::const_iterator iter = pList->find(key2);
			if (iter != pList->end())
			{
				return iter->second;
			}
		}
		return NULL;
	}

	const TDataMap* GetAllData() const { return &m_DataMap; }

	BOOL HasGroup(const TKeyType1& keyValue) const
	{
		return m_DataMap.find(keyValue) != m_DataMap.end();
	}

	BOOL Has(const TKeyType1& key1, const TKeyType2& key2)
	{
		return GetConfig(key1, key2) != NULL;
	}

protected:
	void Clear()
	{
		for (typename TDataMap::iterator iter = m_DataMap.begin(); iter != m_DataMap.end(); ++iter)
		{
			for (int i = 0; i < iter->second->DataList.size(); ++i)
			{
				TConfig::Free(iter->second->DataList[i]);
			}
			SDataListNode::Free(iter->second);
		}
		m_DataMap.clear();
	}

protected:
	TDataMap m_DataMap;
};

template <class TManager, class TKeyType1, class TKeyType2, class TConfig, int NGroupNum, int NListNum>
BOOL CCfg2KeyMgrTemplate<TManager, TKeyType1, TKeyType2, TConfig, NGroupNum, NListNum>::LoadTable(const char* pFilePath)
{
	ASSERT_RETURN(pFilePath, FALSE);
	CServerTabfileLoader& loader = CServerTabfileLoader::GetInstance();
	KTabFile2* pTabFile = loader.GetFileReader(pFilePath);
	if (NULL == pTabFile)
	{
		AssertFile(pFilePath);
		Log(LOG_ERROR, "[ERROR] LoadTable from %s failed", pFilePath);
		return FALSE;
	}

	this->Clear();

	INT nRet = 0;
	TConfig* pConfig = NULL;
	typename TDataMap::iterator iter;
	TKeyType1 key1;
	TKeyType2 key2;
	for (INT nLine = 2; nRet = pTabFile->ReadLine(); ++nLine)
	{
		if (nRet == -1)
		{
			loader.CloseFileReader(pTabFile);
			AssertFile(pFilePath);
			return FALSE;
		}

		pConfig = TConfig::Alloc();
		if (pConfig->ReadItem(*pTabFile))
		{
			key1 = pConfig->GetKey1();
			key2 = pConfig->GetKey2();
			if (GetConfig(key1, key2) == NULL)
			{
				if (GetGroup(key1) == NULL)
				{
					iter = m_DataMap.insert_unique(key1, SDataListNode::Alloc());
				}
				iter->second->DataList.insert_unique(key2, pConfig);
				continue;
			}
			else
			{
				Log(LOG_ERROR, "[ERROR] LoadTable from %s failed, line:%d, multi key, key1:%d, key2:%d", pFilePath, nLine, key1, key2);
			}
		}

		TConfig::Free(pConfig);
		this->Clear();
		Log(LOG_ERROR, "[ERROR] LoadTable from %s failed, line:%d", pFilePath, nLine);
		return FALSE;
	}
	loader.CloseFileReader(pTabFile);
	return TRUE;
}

(18): warning C4091: typedef : пропускается слева от "CCfg2KeyMgrTemplate<XCfgBuffLevelM gr,DWORD,BYTE,XCfgBuffLevel,64,64>: :SDataListNode", когда ни одна переменная не объявлена
(80): note: выполняется компиляция ссылки на экземпляр шаблон класс "CCfg2KeyMgrTemplate<TManager,TKeyT ype1,TKeyType2,TConfig,NGroupNum,NL istNum>"
help
marluna вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Warning 1 warning C4996: 'scanf': This function or variable may be unsafe. Что это за баг такой? ( С ) dannae Помощь студентам 10 08.10.2013 16:49
Warning ошибки record222 PHP 10 01.07.2012 00:24
Warning: mysql_fetch_array() empireofgods Помощь студентам 1 22.05.2011 13:45
Очень ВАЖНО!!!<<WARNING>> Aliance Общие вопросы C/C++ 1 11.11.2008 22:08
Warning LeoN Общие вопросы Delphi 10 11.02.2008 14:32


02:57.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru