我知道很多問題都被問過類似的標題。我有這樣一個類:已經在.obj和warning中定義爲錯誤 - 沒有生成'object'文件
在CustomAllocator.h
namespace MemoryMgmt
{
class MemoryManager
{
.....
}
}
class CustomAllocator
{
public:
void * operator new(size_t i_size);
void operator delete(void*, void*);
virtual ~CustomAllocator(){};
#pragma warning(suppress: 4251)
static boost::thread_specific_ptr< MemoryMgmt::MemoryManager> memory_manager_currentHA;
};
// boost::thread_specific_ptr<MemoryMgmt::MemoryManager> CustomAllocator::memory_manager_currentHA;
inline void * CustomAllocator::operator new(size_t i_size)
{
if (!g_memory_manager_currentHA.get()) {
memory_manager_currentHA.reset(new MemoryMgmt::MemoryManager);
}
return memory_manager_currentHA->AllocateChars(i_size);
}
inline void CustomAllocator::operator delete(void * , void*)
{
//Should not be used
ASSERT(!"Placement delete should not be used for memory objects");
}
在CustomAllocator.cpp
#include <CustomAllocator.h>
MemoryMgmt::MemoryManager CustomAllocator::memory_manager_current = MemoryMgmt::MemoryManager();
boost::thread_specific_ptr<MemoryMgmt::MemoryManager> CustomAllocator::memory_manager_currentHA;
在許多不同的文件頭文件的調用。當然,由於在頭文件中聲明瞭memory_manager_currentHA,所以存在鏈接問題。然而,當我宣佈它在CPP文件會有一個其他錯誤:
錯誤C2220:警告視爲錯誤 - 沒有「對象」文件生成
我知道,這個錯誤是由於警告在Visual Studio C/C++常規配置頁面中爲(Level3/W3)設置的級別。
我想知道是否有任何解決方案來解決此問題而不更改警告級別。
編輯:
例如頭文件的用法之一:
#include "CustomAllocator.h"
class MVeryLongData : public CustomAllocator
{
....
}
'#include'您的'#include「CustomAllocator.h」''在哪裏?發佈一個[MCVE],就像現在你應該知道的那樣... –
我編輯了問題 –