已在.obj&中定义警告被视为错误 - 没有'对象'文件生成

时间:2016-11-21 12:28:35

标签: c++ visual-studio-2013

我知道很多问题都是用类似的标题提出来的。我有一个这样的课:

在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:警告被视为错误 - 没有&#39;对象&#39;文件生成

我知道此错误是由于Visual Studio C / C ++常规配置页面中为(Level3 / W3)设置的警告级别所致。

我想知道是否有任何解决方案可以在不更改警告级别的情况下解决此问题。

修改

例如,头文件的使用之一:

#include "CustomAllocator.h"
class MVeryLongData : public CustomAllocator
  {
    ....
  }

2 个答案:

答案 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)

答案 1 :(得分:0)

您应该将 "closeBrackets": false, 的定义(存储)移动到.cpp文件。