c++为什么错误:no match for 'operator='
C++ so why error: no match for 'operator='
所以我只是想让我的自定义类bced的对象数组,我得到的错误。错误:没有匹配'operator='(操作数类型为' bced '和' bced *')
谁能告诉我为什么?我知道会很简单。也为什么我在这里有一种方法来创建一个未指定长度的数组在c++,然后只是附加一个新的行,每次我想添加一个对象到它?
void PopulateLEDS(){
int i;
bcLed ledArr[17];
for (i = 0; i< 16; i++)
{
ledArr[i] = new bcLed();
ledArr[i].id = i;
ledArr[i].charge = 0;
}
}
所以我需要更多的帮助
为了避免创建10,000个帖子,我将粘贴代码的主体,以便查看我在c++语法中出错的地方。
最新的错误是
/Users/bencawley/Documents/Arduino/Test/Bens_Lights/Bens_Lights.ino: In function 'void PopulateLEDS()':
Bens_Lights:49: error: expected primary-expression before 'public'
public:bcLed ledArr[17];
^
Bens_Lights:52: error: 'ledArr' was not declared in this scope
ledArr[i].id = i;
^
/Users/bencawley/Documents/Arduino/Test/Bens_Lights/Bens_Lights.ino: In function 'void BensPattern(uint8_t)':
Bens_Lights:69: error: 'ledArr' was not declared in this scope
strip.setPixelColor(i,0, 0, ledArr[i].charge, 0);
^
Using library Adafruit_NeoPixel at version 1.0.6 in folder: /Users/bencawley/Documents/Arduino/libraries/Adafruit_NeoPixel
exit status 1
expected primary-expression before 'public'
我的代码是:
class bcLed{
public:int id;
public:int charge;
void incCharge(int amt)
{
charge = charge+amt;
if(charge >= 255){charge = 255;}
}
};
void setup() {
strip.begin();
strip.show(); // Initialize all pixels to 'off'
PopulateLEDS();
}
void loop() {
// Some example procedures showing how to display to the pixels:
BensPattern(45);
}
void PopulateLEDS(){
int i;
bcLed ledArr[17];
for (i = 0; i< 17; i++)
{
ledArr[i].id = i;
ledArr[i].charge = 0;
}
}
void BensPattern(uint8_t wait)
{
uint16_t i, j;
int rn = rand() % strip.numPixels() ;
for (i = 0; i<strip.numPixels(); i++)
{
strip.setPixelColor(i,0, 0, 0, 0);
}
for (i = 0; i<rn; i++)
{
strip.setPixelColor(i,0, 0, ledArr[i].charge, 0);
ledArr[i].incCharge(1);
}
strip.show();
delay(wait);
}
new
在c++中并不总是需要的,在这里也绝对不需要。如果自动分配不够好,new
会为您分配动态内存。如果你想让变量超出它的作用域,你通常只使用new
。用new
分配的内存也必须始终是delete
d,以避免内存泄漏。在现代c++中,new
的使用甚至更少了,因为我们有了智能指针。
bcLed ledArr[17];
这已经为你创建了17个bcLed
s(就像你在c#中使用new
一样,不需要清理),不需要在它们上使用new
。跟他们合作就行了。你的循环条件也是错误的,它应该是< 17
。
for (i = 0; i < 17; i++)
{
ledArr[i].id = i;
ledArr[i].charge = 0;
}
也是为什么我在这里是有一种方法来创建一个未指定的数组长度在c++中,然后只是附加一个新的行,每次我想向它添加一个对象?
是的,这就是std::vector
的作用:
#include <vector>
std::vector<bcLed> ledArr(17);
//loop over them:
for(int i = 0; i < ledArr.size(); ++i)
{
//ledArr[i]
}
//or:
for(std::vector<bcLed>::iterator itr = ledArr.begin() itr != ledArr.end(); ++itr)
{
//*itr
}
// to insert to the back of the vector use push_back:
bcLed aLed;
ledArr.push_back(aLed);
如果你可以访问c++ 11,你可以使用一个基于范围的循环,而不是使用emplace_back
:
#include <vector>
std::vector<bcLed> ledArr(17);
//loop over them, just to iterate:
for(const auto& led : ledArr)
{
//led.id
//led.charge
}
//appending to the vector:
ledArr.emplace_back(/*constructor arguments*/);
回答你的评论
好吧,我要勇敢地问这个问题,当你说"如果你想。变量超出它的作用域,或者您正在使用低级别"我完全不明白这是什么意思……大多数情况下我不明白你所说的作用域或低级内存是什么意思。你能解释这些?作用域是方法运行的时间吗?
变量的作用域是定义变量的上下文。自动存储一直持续到它的作用域结束。大括号{ }
表示作用域。例如:
void foo()
{
int x;
bcLed aLed;
{ //create a new inner scope
bcLed innerLed;
} //scope ends, all automatic variables are destroyed (innerLed in this case)
//can't use `innerLed` here.
int new_int = x;
} // scope ends, same goes, new_int, x, aLed are destroyed.
说真的,一本好书会告诉你它们的区别,以及何时应该使用它们。
ledArr[i] = new bcLed();
不工作,正如错误信息所说,您不能将指向bcLed
(即bcLed*
)的指针分配给bcLed
。
对于bcLed ledArr[17];
,数组的17个元素是默认构造的;你根本不需要new
。因此,只需删除导致错误的代码,下面的代码将正常工作。
bcLed ledArr[17];
for (i = 0; i < 16; i++)
{
ledArr[i].id = i;
ledArr[i].charge = 0;
}
是否有一种方法来创建一个未指定长度的数组在c++,然后只是附加一个新的行,每次我想添加一个对象到它?
这是std::vector
应该做的。
如果要处理数组中的所有元素,则for
的条件应为i < 17
- 错误消息:使用"string* +="后"no match for 'operator+='"
- 在 Eclipse: "error: no match for 'operator='" 中获取错误消息
- 如何'Invalid conversion'和'no match for operator'更正这些 c++ 错误
- 为什么当我没有变量或其他任何命名的东西时"no match for 'operator==' "错误?
- 编译时二叉搜索树错误的反向迭代器表示"no matching function call for operator=()"
- 从 std::ostream 重载 << 运算符时,为什么编译器会给出"too many parameters for this operator function"错误?
- 为什么我收到以下错误:"no match for 'operator=='"?(带模板的嵌套类)
- 在命名空间内的类中使用带有运算符重载的字符串流时"no match for ‘operator>>’"
- C :用sizeof()operator在for for loop中增加一个int变量,只能工作一次
- 如何修复C++中的"no match for operator+"?
- 运算符重载错误"no match for operator error"
- "No match for operator []"
- 如果我没有重载,为什么我会"no match for ‘operator=’"自定义类?
- 为什么编译器显示错误"no match for 'operator[]' (operand types are 'carti' and 'int')"
- 对简单的帐户检查程序有问题?程序返回编译错误,指出"no match for 'operator||' unsure of how to fix?"
- "no match for 'operator >>'"代码中是什么意思?
- "no match for ‘operator>>’ in ‘inputFile >> buffer"错误?
- 如何修复" no match for 'operator<<' in 'std::cout"错误?
- Qt 序列化。QDataStream & operator<< for base class QPolygonF
- Overload operator< for std::pair