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< int > 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<Product *> *table;
吗?
【讨论】:
以上是关于c ++设置空指针?的主要内容,如果未能解决你的问题,请参考以下文章