2016-11-21 51 views
-1

我知道很多問題都被問過類似的標題。我有這樣一個類:已經在.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 
    { 
    .... 
    } 
+0

'#include '您的'#include「CustomAllocator.h」''在哪裏?發佈一個[MCVE],就像現在你應該知道的那樣... –

+0

我編輯了問題 –

回答

1

我終於通過本地禁用警告解決了問題。

#pragma warning (push) 
#pragma warning(disable: 4100) 
#include <boost/thread.hpp> 
#pragma warning(pop) 

#pragma warning (push) 
#pragma warning(disable: 4251) 
    static boost::thread_specific_ptr< MemoryMgmt::MemoryManager> memory_manager_currentHA; 
#pragma warning(pop) 
0

您應的memory_manager_currentHA定義(存儲)移動到cpp文件。

+0

,正如我在問題中所解釋的那樣,將定義結果以不同的錯誤移動。 (警告級別)。什麼是解決它的解決方案? –

+0

他說他試過了。由於這是正確的解決方案,因此問題不包含足夠的信息來回答。 –

+0

@LightnessRacesinOrbit你需要更多什麼? –

相關問題