c ++设置空指针?

Posted

技术标签:

【中文标题】c ++设置空指针?【英文标题】:c++ set null pointers? 【发布时间】:2010-11-04 01:11:54 【问题描述】:

如何将其设置为 null;

LookupTable<Product *> table;

我尝试的每件事都说

1 IntelliSense:不存在合适的构造函数来将“int”转换为“LookupTable”

下面是查找表:

#ifndef LOOKUPTABLE_H
#define LOOKUPTABLE_H

#include <iostream>
#include <string>

using namespace std;

#define MAXRANGE 10

template <class T>
class LookupTable

private:
    T *aptr[MAXRANGE];
    int rangeStart[MAXRANGE];
    int rangeEnd[MAXRANGE];
    int numRanges;

public:
    T defaultValue;
    bool failedRangeCheck;
    std::string failReason;


    // Constructor
    LookupTable() 
       
        numRanges = 0; 
        defaultValue = T();
          

    void addRange(int start, int end)
    
        std::cout << "Created a new range...  Start: " << start << " / End: " << end << endl;
        failedRangeCheck = false;

        //lines omitted because not working anyway

        if ( !failedRangeCheck )
        
            //set ranges
            rangeStart[numRanges] = start;
            rangeEnd[numRanges] = end;

            //build new generic array with end-start+1 positions
            //set pointer to point to it
            aptr[numRanges] = new T[ end - start + 1 ];
            numRanges++;
        
        else
        
            std::cout << "Range overlapped another range." << endl;
            std::cout << failReason << endl;
        
    

    T &operator[](int value)     // Overloaded [] operator
    
        for ( int i = 0; i < numRanges; i++ )
        
            if ( (value >= rangeStart[i]) && (value <= rangeEnd[i]) )
            
                return aptr[i][value - rangeStart[i]];
            
        

        return defaultValue;
    

    ~LookupTable()
    
         delete[] aptr;
         numRanges = 0;     
    

;
#endif

【问题讨论】:

设置 what 为空?你有一个未知模板类型的对象LookupTable,以前没有人听说过。您如何期望任何人知道如何将此对象“设置”为“空”?甚至当应用于这个对象时“设置为 null”应该意味着什么? 这似乎是他之前问题的延伸:***.com/questions/4092747/… 我相信他真正需要的完整答案只有在上下文中才有意义...... 是的,因为我从来没有得到对我的情况有效或有意义的答案......我被指出了正确的方向,但需要更多帮助 你想将 LookupTable 设置为 NULL 做什么? 【参考方案1】:

在您的示例中,table 不是指针。它是一个 LookupTable 类型的对象,其中 LookupTable 是一个模板类。在这种情况下,您碰巧为Product *s 制作了一个专门的 LookupTable,但如果您执行LookupTable&lt; int &gt; table = 0;,您会得到同样的错误

【讨论】:

【参考方案2】:

以下是您将其设置为 NULL 的方法 - 您将其定义为不同的类型:

LookupTable<Product *>* table = NULL;

如果您习惯于处理 C#,那么您也许可以将类视为“值类型”。

这也可能与您想象的不同。在 C++ 中:

LookupTable<Product *> table1;
LookupTable<Product *> table2 = table;

当你编辑 table2 时,table1 不会改变。

还有:

void SomeFunction(LookupTable<Product *> t)

    // do something with t


// ...

LookupTable<Product *> table;
SomeFunction(table);

如果 SomeFunction 编辑 t,则表不会改变。

【讨论】:

【参考方案3】:

您将 table 声明为 LookUpTable 类型,其元类型为指向 Product 的指针。

【讨论】:

【参考方案4】:

这是一个指针表,而不是指向(指针)表的指针。你是说LookupTable&lt;Product *&gt; *table; 吗?

【讨论】:

以上是关于c ++设置空指针?的主要内容,如果未能解决你的问题,请参考以下文章

C语言面试题大汇总

C语言面试题汇总之一

strcpy函数如何使用

删除空指针[重复]

获得额外意图时的空指针

在android spinner上获取空指针