命名空间在C 中碰撞,坚持寻找解决方案

namespace collision in C++, stuck in finding a solution

本文关键字:坚持 寻找 解决方案 碰撞 命名空间      更新时间:2023-10-16

我想使用XML在代码中组合两个库。在这里阅读了许多帖子之后,我决定将较小的库包裹在命名空间环境中。

现在这里开始我的问题。(我将使用伪代码,因为有〜2000行代码)

xmlparser.h

#include<...>
namespace xmlparser
{
stuff that belongs to headerfile
}

xmlparser.cpp

#include "xmlParser.h"
#include "..."
using namespace xmlparser;
stuff that belongs to source code ...

现在,我在第1000行上的xmlparser.cpp中遇到了一个错误(我假设在这里一切都很好?)

未定义的引用`xmlparser :: stringDup(char const*,int)'

引起错误的行:

XMLNode XMLNode::createXMLTopNode(XMLCSTR lpszName, char isDeclaration) {  return XMLNode(NULL,stringDup(lpszName),isDeclaration); }

在标题文件中:

XMLDLLENTRY XMLSTR stringDup(XMLCSTR source, int cbData=-1);

来源:

// Duplicate a given string.
XMLSTR stringDup(XMLCSTR lpszData, int cbData)
{
if (lpszData==NULL) return NULL;
XMLSTR lpszNew;
if (cbData==-1) cbData=(int)xstrlen(lpszData);
lpszNew = (XMLSTR)malloc((cbData+1) * sizeof(XMLCHAR));
if (lpszNew)
{
    memcpy(lpszNew, lpszData, (cbData) * sizeof(XMLCHAR));
    lpszNew[cbData] = (XMLCHAR)NULL;
}
return lpszNew;
}

给出了对" XMLPARSER :: stringDup(char const*,int)"的更未定的引用。我是否犯了系统错误?

您是否忘记将xmlparser.cpp的内容放入名称空间范围" namespace xmlparser {xxxxxx}"?

xmlparser.cpp的内容也需要以blow的名称范围命名:

   #include "xmlParser.h"
    #include "..."
    namespace xmlparser
    {
        *** the contents of xmlParser.cpp ***
    }

在您的来源中,您必须更改

XMLSTR stringDup(XMLCSTR lpszData, int cbData)

to

XMLSTR xmlparser::stringDup(XMLCSTR lpszData, int cbData)

等。