Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 指向表的指针导致无法加载符号_C++_Pointers_Symbols - Fatal编程技术网

C++ 指向表的指针导致无法加载符号

C++ 指向表的指针导致无法加载符号,c++,pointers,symbols,C++,Pointers,Symbols,我的程序中有几个大表,我正试图编写一个类来提供这些表的通用接口。每个表都在自己的头文件中,包含一个const double数组和几个描述表布局的变量。所有的表都包含在我的预编译头中 我的类只有一个initialize函数,它确定使用哪个表,然后将其成员变量设置为适当的值,并将其双指针设置为数组的第一个元素。我有一些#定义来确定要使用哪一组表,然后我将一个枚举传递到initialize函数中,以确定要使用给定集合中的哪一个表。因此,我的初始化函数如下所示: void CMyClass::initi

我的程序中有几个大表,我正试图编写一个类来提供这些表的通用接口。每个表都在自己的头文件中,包含一个const double数组和几个描述表布局的变量。所有的表都包含在我的预编译头中

我的类只有一个initialize函数,它确定使用哪个表,然后将其成员变量设置为适当的值,并将其双指针设置为数组的第一个元素。我有一些#定义来确定要使用哪一组表,然后我将一个枚举传递到initialize函数中,以确定要使用给定集合中的哪一个表。因此,我的初始化函数如下所示:

void CMyClass::initialize(enum mode)
{
#ifdef VERSION1
    switch (mode)
    {
        case mode1:
        m_Data = &tableVersion1Mode1[0];
        //set member variables
        break;

        case mode2:
        m_Data = &tableVersion1Mode2[0];
        //set member variables
        break;

        case mode3:
        m_Data = &tableVersion1Mode3[0];
        //set member variables
        break;
    }
#endif

#ifdef VERSION2
    switch(mode)
    {
        //same thing
    }
#endif

//etc etc
}
问题是,在某些情况下,此程序的调试符号不会加载,也不会命中任何断点。我已经将问题缩小到这个类中的双指针,因为我可以注释掉这个成员变量,问题就消失了。但我完全被它的行为弄糊涂了

如果在每种情况下都将指针设置为不同的表(如上所述),则不会加载任何符号

如果我注释掉其中一个指针赋值,不管是哪一个,符号都会被加载,一切正常

如果我为任意两种或所有三种情况设置指向同一数组的指针,那么符号被加载,一切正常


我对这个主题做了一些研究,我知道如果没有加载符号,那么可能是.pdb文件有问题。我尝试手动加载.pdb,但它说它不匹配。但是如果我在可执行文件和.pdb上运行ChkMatch.exe,它会说它们匹配。发生了什么事?

有没有其他东西可以删除以正确加载符号?这可能只是您在编译器/链接器中遇到一些内部限制的情况。是的,我认为您是对的。我去掉了其中一个数组的所有元素,问题就消失了。但我仍然不知道如何解决这个问题。我尝试将数组声明为静态数组,并尝试增加堆和堆栈大小。尝试将文件拆分为多个文件。这可能会有帮助。