正在将链式哈希 table 初始化为 NULL。出现 "lvalue required as left operand of assignment" 错误。为什么?这是我的代码:
Initializing chained hash table to NULL. Get "lvalue required as left operand of assignment" error. Why? Here is my code:
我正在尝试创建链式哈希 table。我已经开始构建一个动态数组,现在正试图将每个数组指针初始化为 NULL。但是我收到错误 "lvalue required as left operand of assignment"。为什么?这是我的代码:
#include <iostream> // for i/o functions
using namespace std;
const int HTSIZE = 997; //size of the hash table
struct CHTNode
{
int value;
CHTNode *next;
};
void InitializeTable(CHTNode* &cHT);
int main()
{
CHTNode *chainedHT;
chainedHT = new(nothrow) CHTNode[HTSIZE];
if (chainedHT == NULL)
{
cout << "ERROR: Memory allocation error"
<< endl;
return 1;
} //end if
else
{
InitializeTable(chainedHT);
}
}
void InitializeTable(CHTNode* &cHT)
{
for (int i = 0; i < HTSIZE; i++)
&cHT[i] = NULL; //ERROR FOR THIS LINE
}
运算符的地址 &
returns 给定表达式的地址,因此 &cHT[i]
求值为 的 地址 i
cHT
的第一个元素。 似乎 你正试图分配给变量 cHT[i]
,但你现在正在做的是试图分配给 cHT[i]
的地址值,这比尝试分配给常量更有意义。
您没有指针数组。您分配了 CHTNode 类型的对象数组。
您可以在分配数组时对其进行值初始化。例如
chainedHT = new(nothrow) CHTNode[HTSIZE] {};
如果您想编写一个单独的函数对数组的每个元素进行零初始化,那么该函数可以声明为
void InitializeTable( CHTNode* cHT, int n );
并定义为
void InitializeTable( CHTNode* cHT, int n )
{
for ( int i = 0; i < n; i++ ) cHT[i] = {};
}
至于错误的说法
&cHT[i] = NULL;
那就没意义了。表达式 &cHT[i]
是您尝试分配的临时对象。
我正在尝试创建链式哈希 table。我已经开始构建一个动态数组,现在正试图将每个数组指针初始化为 NULL。但是我收到错误 "lvalue required as left operand of assignment"。为什么?这是我的代码:
#include <iostream> // for i/o functions
using namespace std;
const int HTSIZE = 997; //size of the hash table
struct CHTNode
{
int value;
CHTNode *next;
};
void InitializeTable(CHTNode* &cHT);
int main()
{
CHTNode *chainedHT;
chainedHT = new(nothrow) CHTNode[HTSIZE];
if (chainedHT == NULL)
{
cout << "ERROR: Memory allocation error"
<< endl;
return 1;
} //end if
else
{
InitializeTable(chainedHT);
}
}
void InitializeTable(CHTNode* &cHT)
{
for (int i = 0; i < HTSIZE; i++)
&cHT[i] = NULL; //ERROR FOR THIS LINE
}
运算符的地址 &
returns 给定表达式的地址,因此 &cHT[i]
求值为 的 地址 i
cHT
的第一个元素。 似乎 你正试图分配给变量 cHT[i]
,但你现在正在做的是试图分配给 cHT[i]
的地址值,这比尝试分配给常量更有意义。
您没有指针数组。您分配了 CHTNode 类型的对象数组。
您可以在分配数组时对其进行值初始化。例如
chainedHT = new(nothrow) CHTNode[HTSIZE] {};
如果您想编写一个单独的函数对数组的每个元素进行零初始化,那么该函数可以声明为
void InitializeTable( CHTNode* cHT, int n );
并定义为
void InitializeTable( CHTNode* cHT, int n )
{
for ( int i = 0; i < n; i++ ) cHT[i] = {};
}
至于错误的说法
&cHT[i] = NULL;
那就没意义了。表达式 &cHT[i]
是您尝试分配的临时对象。