C++ 将全局变量传递给函数-C++;

C++ 将全局变量传递给函数-C++;,c++,function,pointers,global-variables,C++,Function,Pointers,Global Variables,我正在为一个路由器编写代码,我已经完成了为一个路由表编写代码的部分。我做了一个类似这样的课程: //Global variables unsigned char Dst_IP[4]; unsigned char Nxt_Hop[4]; int Mask; int OutIF; RTEntry::RTEntry(unsigned char *dst_IP, int mask, int outIF, unsigned char *nxt_Hop) { Dst_IP = dst_IP;

我正在为一个路由器编写代码,我已经完成了为一个路由表编写代码的部分。我做了一个类似这样的课程:

//Global variables
unsigned char Dst_IP[4];
unsigned char Nxt_Hop[4];
int Mask;
int OutIF;

RTEntry::RTEntry(unsigned char *dst_IP, int mask, int outIF, unsigned char *nxt_Hop)
{
    Dst_IP = dst_IP;
    Mask = mask;
    OutIF = outIF;
    Nxt_Hop = nxt_Hop;
}

bool match(unsigned char *IPaddress)
{
    bool isMatch = false;

    if(IPaddress == dst_IP)
    {
        isMatch = true;
    }

    return isMatch;
}
我在尝试编译时遇到了一个错误,因为dst_IP没有在match函数的作用域中声明。有人知道如何解决这个问题吗?这可能与指针有关。我应该提到我对C++ +… 提前谢谢

< P>(我假设在全局的前面有“代码>私下<代码> >关键字是编译器提供的一些非标准扩展。用标准C++,不允许那个关键字。” C++区分大小写。全局变量名为
Dst_IP
,但在您编写的
Dst_IP
match()

无关的:


要比较C字符串,请从
标题使用
std::strcmp()
std::strncmp()
(如果您希望对可能不以NULL结尾的字符串更安全,请使用后一个)。在指针上使用
=
操作符时,它只比较指针,而不是指针指向的内容。或者更好的方法是,使用
std::string
而不是原始的C字符串。

我看到的唯一
dst_IP
声明”在
RTEntry
的参数列表中。你是否想改变传递给它的内容(看起来你就是这么做的)。为什么你要传递一个在任何地方都可以全局访问的全局文件?此外,全局的名称是
Dst_IP
,而不是
Dst_IP
。还有,为什么要使用globals?
IPaddress==dst_IP
RTEntry将是一个路由表条目,我正计划创建一个类型为的向量。当创建一个条目时,我想在构造函数中声明dst_ip、掩码、接口和下一跳。我刚刚更改了它,以便顶部的变量是私有的。match函数应该检查我“当前正在查看”的条目是否是我想要用于相关数据包的条目。比较两个指针,而不是它们指向的(字符串)。感谢您的反馈。关于我的globals前面的私有标识符,我真的不知道应该把它们放在哪里。到目前为止,它们都写在头文件(.h)中,但我不知道在我的程序文件(.cpp)中写入它们的位置。。我可能应该提到,我对C++@Zeliax非常陌生,不在头文件中放置全局变量。当您包含头文件时,头文件中的文本只是复制到源文件中,因此通过几个
#include
语句,您可以获得变量的多个副本。您应该阅读有关如何使用
extern
变量的教程。大多数情况下,完全避免使用全局变量。上面(线程体)的代码来自.cpp文件。我只是不知道如何使用我在头文件中声明的隐私。@Zeliax为什么不从小处开始,比如只使用一个变量和一个地方,而不是尝试编写一个更大的程序。你当然是对的。我现在编写的代码非常重要,因为我必须按时完成,所以我没有时间做一些小动作。无论如何,在花了这么长时间试图弄清楚如何使用这两种不同类型的文件之后,我找到了一个很好的指南。谢谢你的意见。