Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++结构中的动态内存分配 我不理解C++中结构体成员动态分配所需的语法。基本上,我需要使用临时数组和strlen将char数组成员填充到精确的大小。这是我的结构: struct card { char *rank; char *suit; char color; bool dealt; char *location; };_C++_Memory_Dynamic_Struct_Allocation - Fatal编程技术网

C++结构中的动态内存分配 我不理解C++中结构体成员动态分配所需的语法。基本上,我需要使用临时数组和strlen将char数组成员填充到精确的大小。这是我的结构: struct card { char *rank; char *suit; char color; bool dealt; char *location; };

C++结构中的动态内存分配 我不理解C++中结构体成员动态分配所需的语法。基本上,我需要使用临时数组和strlen将char数组成员填充到精确的大小。这是我的结构: struct card { char *rank; char *suit; char color; bool dealt; char *location; };,c++,memory,dynamic,struct,allocation,C++,Memory,Dynamic,Struct,Allocation,以下是使用结构的函数: bool importCard(card *deckPtr, char *deckName); 我创建了一个包含52张卡片的数组,并指定了一个指向它的指针,然后将它作为第一个参数传递给函数。deckPtr这里是函数中的一个循环,它应该将卡片信息读入结构数据成员 for(index=0;index<52;index++,deckPtr++) { fin >> *temp; charCount=stringLength(temp); de

以下是使用结构的函数:

bool importCard(card *deckPtr, char *deckName);
我创建了一个包含52张卡片的数组,并指定了一个指向它的指针,然后将它作为第一个参数传递给函数。deckPtr这里是函数中的一个循环,它应该将卡片信息读入结构数据成员

for(index=0;index<52;index++,deckPtr++)
  {

  fin >> *temp;
  charCount=stringLength(temp);
  deckPtr.*rank = new char[charCount+1];
  stringCopy(*temp, deckPtr.*rank);

  fin >> *temp;
  charCount=stringLength(temp);
  deckPtr.*suit = new char[charCount+1];
  stringCopy(*temp, deckPtr.*suit);

  if(deckPtr.*suit==('d')||deckPtr.*suit==('h'))
     {
     (*deckPtr).color='r';
     }
  else
     {
     (*deckPtr).color='b';
     }

  (*deckPtr).dealt=false;

  deckPtr.*location = new char[11];
  stringCopy(unshPtr, deckPtr.*location);

  }
我得到三个编译错误:在这个范围内没有声明等级和位置。我做错了什么?谢谢

您需要deckPtr->foo而不是deckPtr.*foo

您的问题是,引用引用操作符是在FoO上运行的,而不是在DekpTR上操作,这对C++编译器没有意义,因此它使用了指向成员运算符的指针。此运算符用于在对象上执行成员函数指针,这与访问成员完全不同。在一个像C++这样的高级C++类中,你不必担心使用或理解这个操作符。 通常,在C/C++中,只要有指向结构的指针,就要使用->运算符,而不是。。foo->bar相当于*foo.bar,但它可以防止您弄乱并忘记括号。C有一个箭头操作符是有原因的——它更简单、更清晰。在我不那么谦虚的观点中,强加这种任意限制的老师实际上教学生写糟糕的代码和重新发明轮子,但我没有他们教编程的经验…

你需要deckPtr->foo而不是deckPtr.*foo

您的问题是,引用引用操作符是在FoO上运行的,而不是在DekpTR上操作,这对C++编译器没有意义,因此它使用了指向成员运算符的指针。此运算符用于在对象上执行成员函数指针,这与访问成员完全不同。在一个像C++这样的高级C++类中,你不必担心使用或理解这个操作符。 通常,在C/C++中,只要有指向结构的指针,就要使用->运算符,而不是。。foo->bar相当于*foo.bar,但它可以防止您弄乱并忘记括号。C有一个箭头操作符是有原因的——它更简单、更清晰。在我不那么谦虚的看法中,强加这种任意限制的老师实际上教学生写糟糕的代码和重新发明轮子,但我没有他们教编程的经验…

语法是deckPtr->rank,deckPtr->suit,deckPtr->location=new char[…]

<> p>但是你的编码风格更像C而不是C++。相反,如果使用现代C++,使用方便的RII类,如STD::string,代码就变得更加简化:只需使用STD::String代替原始CHAR*指针,而不必注意内存分配和内存释放:它都是由STD::string和析构函数自动管理的。
#include <string>

struct card
{
   std::string rank;
   std::string suit;
   char color;
   bool dealt;
   std::string location;
};
同样,内存分配由std::vector自动管理,与原始C数组不同,您可以使用其大小方法查询向量的元素计数。

语法为deckPtr->rank,deckPtr->suit,deckPtr->location=new char[…]

<> p>但是你的编码风格更像C而不是C++。相反,如果使用现代C++,使用方便的RII类,如STD::string,代码就变得更加简化:只需使用STD::String代替原始CHAR*指针,而不必注意内存分配和内存释放:它都是由STD::string和析构函数自动管理的。
#include <string>

struct card
{
   std::string rank;
   std::string suit;
   char color;
   bool dealt;
   std::string location;
};

同样,内存分配由std::vector自动管理,与原始C数组不同,您可以使用其大小方法查询向量的元素计数。

您可能希望使用deckPtr->rank、deckPtr->suit和deckPtr->location为字符指针分配一些内容,*deckPtr.rank等。。请注意,*in char*var不是变量名称的一部分。它只是声明变量是指向char的指针

您可能希望使用deckPtr->rank、deckPtr->suit和deckPtr->location为char指针分配一些内容,或者,*deckPtr.rank等。。请注意,*in char*var不是变量名称的一部分。它只是声明变量是指向char的指针

stringLength和stringCopy是我自己的函数。我不得不给他们写这个程序是一个类赋值,但它们的功能与字符串库中的对应项相同。秩和适合是否不止一个字符?另外,你的操作符选择对于C++来说不是非常地道的,这可能是问题的一部分。不用担心char *,只需要使用STD::Struts。我也不能使用箭头操作符。秩和套的范围大约是3到7个字符。StrugStand和SrrimeScript是我自己的函数。我必须在今天晚上写
程序是一个类赋值,但它们的作用方式与对应的字符串库相同。秩和适合是否不止一个字符?此外,你的操作符选择对于C++来说并不是非常地道,这可能是问题的一部分。不要使用char *,只需使用STD::Struts。我也不能使用箭头操作符。秩和套的范围大约是3到7个字符。箭头操作符不允许。她希望我们做的练习很难。也许你是说“DekpTr.Foo?”USER 1362548:你是想把它弄错,还是从来没有真正学习C++?我不知道不使用->操作符会教你什么。这就是说,指向成员运算符。*的指针与->运算符不同。当我尝试使用箭头时,我得到一个不兼容的赋值错误,即char*到char[10]@user1362548在哪一行?还不允许使用箭头运算符。她希望我们做的练习很难。也许你是说“DekpTr.Foo?”USER 1362548:你是想把它弄错,还是从来没有真正学习C++?我不知道不使用->操作符会教你什么。也就是说,指向成员运算符。*的指针与->运算符不同。当我尝试使用箭头时,我在哪一行上得到一个不兼容的赋值错误char*to char[10]@user1362548?如果不允许他们使用箭头运算符,他们可以使用STL的机会有多大?如果不允许他们使用箭头运算符,他们使用STL的机会有多大?