C++ 接收错误“;类型为“%T';和`%T';到二进制文件“%O';在`%Q(%#T,%#T)'&引用;
我非常非常努力地解决这个问题。我一直都能通过谷歌找到我的答案,这是我第一次因为我的尽职调查而发布到论坛上。然而,这完全难住了我,谷歌似乎正在推荐,这对我来说,这是一个罕见的问题 以下是我的简化代码:C++ 接收错误“;类型为“%T';和`%T';到二进制文件“%O';在`%Q(%#T,%#T)'&引用;,c++,operator-overloading,C++,Operator Overloading,我非常非常努力地解决这个问题。我一直都能通过谷歌找到我的答案,这是我第一次因为我的尽职调查而发布到论坛上。然而,这完全难住了我,谷歌似乎正在推荐,这对我来说,这是一个罕见的问题 以下是我的简化代码: #include <sstream> #include <string> #include <stdio.h> #include <stdlib.h> using namespace std; class DJPchar{ public:
#include <sstream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
class DJPchar{
public:
//General Variables
unsigned char *word;
int length;
//Initialization Functions
DJPchar();
DJPchar(unsigned char *w, int len);
~DJPchar();
DJPchar& operator+=(const DJPchar& word2);
};
/////////////////////////////////////////////////////////////
//Initialization Functions
/////////////////////////////////////////////////////////////
DJPchar::DJPchar(){
word = NULL;
length = 0;
}
DJPchar::DJPchar(unsigned char *w, int len){
int i;
length = len;
word = new unsigned char[length];
for (i=0; i<length; i++){
word[i] = w[i];
}
}
DJPchar::~DJPchar(){
delete[] word;
}
/////////////////////////////////////////////////////////////
//Problem Function
/////////////////////////////////////////////////////////////
DJPchar& DJPchar::operator+=(const DJPchar &word2){
unsigned char *temp;
int i, newlength;
temp = this->word;
newlength = this->length + word2.length;
this->word = new unsigned char (newlength);
for(i=0; i<this->length; i++){
this->word[i] = temp[i];
}
for(i=this->length; i<newlength; i++){
this->word[i] = word2.word[i-this->length];
}
this->length = newlength;
delete[] temp;
return *this;
}
int main(){
unsigned char a;
unsigned char b[7];
a = 'b';
b[0] = 'b';
b[1] = 'a';
b[2] = 't';
b[3] = '\n';
b[4] = 200;
b[5] = 'n';
b[6] = '!';
DJPchar *c_a = new DJPchar(&a, 1);
DJPchar *c_b = new DJPchar(b, 7);
c_a += c_b; //Error Line
return 0;
}
我一直在发疯,寻找是否在我试图用作+,基础的函数中使用了“+”,然后改变各种各样的指针等等,把它放在类外和类内
明天,我可能会参考第1条规则,但今天我花了6个小时做了一件事情,本来要花4分钟来验证它是否有效并继续前进。。。我是一只非常悲伤的熊猫。运算符重载必须至少有一个用户定义类型的参数。您的代码是:
DJPchar *c_a = new DJPchar(&a, 1);
DJPchar *c_b = new DJPchar(b, 7);
c_a += c_b; //Error Line
c_a
和c_b
都是指针,不是用户定义的类型 运算符重载必须至少具有一个用户定义类型的参数。您的代码是:
DJPchar *c_a = new DJPchar(&a, 1);
DJPchar *c_b = new DJPchar(b, 7);
c_a += c_b; //Error Line
c_a
和c_b
都是指针,不是用户定义的类型 修复应该是:
(*c_a) += *c_b;
C++中的运算符不是“解除”(像函数语言一样,例如Haskell;C的概念)
<丹尼尔>:这个答案引用了你的问题的答案(“为什么它应该是这样的”):C++没有为指针做自动提升操作符。我想这可能主要是因为C++希望保持C兼容,而 < P>修复应该是:(*c_a) += *c_b;
C++中的运算符不是“解除”(像函数语言一样,例如Haskell;C的概念)
<丹尼尔>:这个答案引用了你的问题的答案(“为什么它应该是这样的”):C++没有为指针做自动提升操作符。我想这可能主要是因为C++想要保持C兼容,而我得到了类似的结果。 错误:“int64_t{aka long int}”和“to binary”运算符*类型的操作数无效 但原因与OP不同
对我来说,我试图用“index”乘以一个值,该“index”在函数中进一步声明 不幸的是,它似乎在抱怨函数的参数,而不是实际的坏部分。从中删除“*索引” 解决了这个问题。我猜是无用的错误消息。我得到了类似的消息 错误:“int64_t{aka long int}”和“to binary”运算符*类型的操作数无效 但原因与OP不同 对我来说,我试图用“index”乘以一个值,该“index”在函数中进一步声明 不幸的是,它似乎在抱怨函数的参数,而不是实际的坏部分。从中删除“*索引”解决了这个问题。我猜这是一条毫无帮助的错误消息。哦,天啊,天啊,天啊。。。在发布后14秒内完全解决了这个问题。。。正如它所要求的,它希望我将c_a+=c_b发布为*c_a+=*c_b我不完全理解为什么会是这样,但当我再一次看到这个错误时,就很清楚了。。。我将把这件事作为我白痴的证明(不要开玩笑,我花了六个小时在这件事上,本应该花六个小时十五秒…)并作为一个警告,如果其他人在指针数学101中偶然发现这个错误…哦,那可能是真的。这是我的类的一个更大的测试平台的一部分,因此动态地分配DJPchar对象并将其添加到其他对象中。这部分代码可能已经被删除了。“为无符号字符重新创建字符串类”-因此本质上您正在寻找
std::basic_string
?哇。谢谢大家这么快的回复!我以为这会是一夜之间的修复,但非常感谢大家!它通常有助于读取错误消息(而不仅仅是识别是否存在错误和行)。至于答案的速度,所以(不是你15岁,而是奥利正确回答的3米),我同意这是惊人的。哦,天啊,天啊,天啊。。。在发布后14秒内完全解决了这个问题。。。正如它所要求的,它希望我将c_a+=c_b发布为*c_a+=*c_b我不完全理解为什么会是这样,但当我再一次看到这个错误时,就很清楚了。。。我将把这件事作为我白痴的证明(不要开玩笑,我花了六个小时在这件事上,本应该花六个小时十五秒…)并作为一个警告,如果其他人在指针数学101中偶然发现这个错误…哦,那可能是真的。这是我的类的一个更大的测试平台的一部分,因此动态地分配DJPchar对象并将其添加到其他对象中。这部分代码可能已经被删除了。“为无符号字符重新创建字符串类”-因此本质上您正在寻找std::basic_string
?哇。谢谢大家这么快的回复!我以为这会是一夜之间的修复,但非常感谢大家!它通常有助于读取错误消息(而不仅仅是识别是否存在错误和行)。至于答案的速度(不是你的15秒,而是奥利正确回答的3米),我同意这是惊人的。还没有+1,因为(a)您没有展示如何修复它(b)您没有解决问题中的“为什么应该这样”部分。这个答案可能更有用。@sehe:很公平。但解决办法应该是显而易见的。“为什么”与问题并不相关(请注意,指针并不是运算符重载规则适用的唯一基本类型)。OP搜索了6个小时。他即将“阅读gcc的来源”。我不能同意