C ++包含混乱

时间:2014-04-11 15:53:50

标签: c++ visual-c++ mfc

我的C ++应用程序存在以下问题(我刚刚开始使用C ++)。

我很确定它以某种方式与包含有关,但我相信我正确使用包含警卫,所以不确定我还能做些什么。

示例:

如果我在头文件中使用函数体声明以下头文件,则应用程序将按预期编译并运行。 如果我拆分成单独的.h和.cpp文件,则构建失败,并在本文末尾复制了错误。我想正确地将实现与标题分开这是a)正确的方法,b)导致更快的构建。

我已经包含了配置属性的屏幕截图>链接器>输入和一般>在项目构建期间必须更改MFC的使用以满足要求(我需要使用“在静态库中使用MFC”)。

那么,我怎样才能正确地拆分我的文件而不让我的构建失败?感谢。

json_ops.h(全部在头文件中)

#ifndef JSON_OPS_H
#define JSON_OPS_H

#include "stdafx.h"

#include "../srclib/rapidjson/document.h"

namespace cdm_data_distributable
{
    class json_ops
    {
    public:

        void test_json() const;
    };

    void json_ops::test_json() const
    {
        // json parsing example

        const char json[] = "{ \"hello\" : \"world\" }";

        rapidjson::Document d;
        d.Parse<0>(json);
    }
}

#endif

json_ops.h,json_ops.cpp(单独的文件)

标头文件

#ifndef JSON_OPS_H
#define JSON_OPS_H

#include "stdafx.h"

#include "../srclib/rapidjson/document.h"

namespace cdm_data_distributable
{
    class json_ops
    {
    public:

        void test_json() const;
    };
}

#endif

.CPP文件

#include "json_ops.h"

namespace cdm_data_distributable
{
    void json_ops::test_json() const
    {
        // json parsing example

        const char json[] = "{ \"hello\" : \"world\" }";

        rapidjson::Document d;
        d.Parse<0>(json);
    }
}

导致错误

error LNK1169: one or more multiply defined symbols found

"void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) already defined in LIBCMTD.lib(new.obj)

"void __cdecl operator delete(void *)" (??3@YAXPAX@Z) already defined in LIBCMTD.lib(dbgdel.obj)    C:\SVN\CdmDataCds\Application\CdmDataDistributable.Ui\uafxcwd.lib(afxmem.obj)   CdmDataDistributable.Ui

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

看起来您正在使用预编译的标头;你需要在每个cpp文件中包含stdafx.h。只需在#include "stdafx.h"之前在cpp中添加#include "json_ops.h"行。

如果json_ops.h包含在其他地方,则stdafx.h不会系统地包含在您的json_ops.cpp文件中。