【问题标题】:c++ set null pointers?c ++设置空指针?
【发布时间】: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”应该意味着什么?
  • 这似乎是他之前问题的延伸:stackoverflow.com/questions/4092747/… 我相信他真正需要的完整答案只有在上下文中才有意义......
  • 是的,因为我从来没有得到对我的情况有效或有意义的答案......我被指出了正确的方向,但需要更多帮助
  • 你想将 LookupTable 设置为 NULL 做什么?

标签: c++


【解决方案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; 吗?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-16
          • 1970-01-01
          • 2013-05-24
          • 2017-11-09
          • 2011-09-17
          • 1970-01-01
          相关资源
          最近更新 更多