我正在尝试用一个整数参数实现一个操纵器。 除了一点点差异之外,我认为我正在完成this guide和this question中所说的内容。唯一的区别是我的运营商是会员而不是免费功能。
我将在这里放置我的代码的相关部分。将省略一些运算符和其他内部例程以保持代码清洁。见下文:
的main.cpp
#include "Display.h"
int main()
{
Display disp;
disp << position(3) << "some string here";
// ...
}
Display.h
struct manip
{
Display& (*_f)(Display&, int);
int _i;
manip(Display& (*f)(Display&, int), int i) : _f(f), _i(i) {}
};
manip position(int pos);
class Display
{
private:
int _cursor = 0;
void cursorPosition(int pos);
public:
Display& operator<<(manip& m);
friend Display& setPosition(Display& disp, int pos);
};
Display.cpp
#include "Display.h"
Display& setPosition(Display& disp, int pos)
{
disp.cursorPosition(pos);
return disp;
}
manip position(int pos)
{
return manip(setPosition, pos);
}
Display& Display::operator<<(manip& m)
{
return m._f(*this, m._i);
}
编译器返回此错误消息:
“不匹配'运算符&lt;&lt;' (操作数类型是'显示'和'操纵')“
有人能告诉我我做错了什么吗?
答案 0 :(得分:0)
import serial
import time
import csv
ser = serial.Serial('COM29', 57600)
timeout = time.time() + 60/6 # 5 minutes from now
result = []
while True:
test = 0
if test == 5 or time.time() > timeout:
break
ss=ser.readline()
print(ss)
s=ss.replace("\n","")
result.append(s)
time.sleep(0.02)
with open('C:\Users\Ivory Power\Desktop\EEG_Data\Othr_eeg\egg31.csv', 'w') as csvfile:
spamwriter = csv.writer(csvfile,delimiter=',', lineterminator='\n')
spamwriter.writerow([result])
csvfile.close()
disp << position(3) << "some string here";
会返回一个临时的position(3)
对象。
您的重载manip
运算符声明如下:
<<
只有 Display& operator<<(manip& m);
引用可以绑定到临时对象。非const
引用不会绑定到临时对象。您的const
运算符应该有一个<<
参数,而不是const manip &
。
这与具有参数的操纵器无关。没有以相同方式使用的参数的操纵器也将具有相同的问题,除非它在全局范围内被声明为静态对象(但是,在这种情况下,它也应该是manip &
对象,并且将具有同样的问题)。