2010-11-04 73 views
1

我将如何设置为空;C++设置空指针?

LookupTable<Product *> table; 

一切,我试着说

1智能感知:没有合适的构造存在,从 “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 
+3

设置*什么*为null?你有一个未知的模板类型'LookupTable'的对象,这是以前从未有人听说过的。你如何期望任何人知道如何“设置”这个对象“为空”?甚至什么“设置为空”在应用于此对象时应该表示什么? – AnT 2010-11-04 01:16:22

+0

这似乎是他以前的问题的延伸:http://stackoverflow.com/questions/4092747/c-pointers-to-objects-type-checking我相信他真正需要的完整答案只有在那里的背景... – TheUndeadFish 2010-11-04 01:43:39

+0

它是,因为我从来没有得到一个工作或对我的情况有意义的答案...我被指出正确的方向,但需要更多的帮助 – JustinY17 2010-11-04 01:47:09

回答

0

你会得到同样的错误这里是你如何将它设置为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,则表不发生变化。

0

您将表格声明为一种LookUpTable类型的指向元件类型的指针。

0

这是一个指针表,而不是指向表(指针)的指针。你的意思是LookupTable<Product *> *table;

4

在你的例子中,table不是一个指针。它是LookupTable类型的对象,其中LookupTable是模板类。在这种情况下,你恰好是制作LookupTable中专门为Product * S,但如果你没有LookupTable<int> table = 0;