【发布时间】:2016-12-04 22:46:43
【问题描述】:
我有一个结构
struct myStruct {
fstream fp;
char *buffer;
size_t size;
};
我是 C++ 新手,正在尝试编写代码,其中一个线程将从文件读取到缓冲区,而主线程将缓冲区写入另一个文件。代码示例如下:
int main() {
pthread tid1;
struct myStruct readArgs;
fstream fileP, fileP2;
fileP.open("/tmp/20MBFile", fstream::in);
fileP2.open("/tmp/trial-file", fstream::out);
char *buffer;
readArgs.fp = fileP;
readArgs.buffer = buffer;
readArgs.size = 1048576;
pthread_create(&tid1, NULL, Read, &readArgs);
pthread_join(tid1, NULL);
fileP2.write(buffer, 1048576);
......
}
读取函数如下:
void *Read(struct myStruct *readArgs) {
readArgs->fp.read(readArgs->buffer, readArgs->size);
pthread_exit(NULL);
}
然而,当我编译我的代码时,我得到了以下错误:
错误:使用已删除的函数 'std::basic_fstream& std::basic_fstream::operator=(const std::basic_fstream&)' readArgs.fp = 文件P;
与
错误:从 'void* ()(myStruct)' 到 'void* ()(void)' 的无效转换 [-fpermissive] pthread_create(&tid1, NULL, 读取, &readArgs); ^ 在 /usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../include/c++/4.8.3/x86_64-redhat-linux/bits/gthr 包含的文件中-default.h:35:0, 来自/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../include/c++/4.8.3/x86_64-redhat-linux/bits/gthr.h: 148, 来自/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../include/c++/4.8.3/ext/atomicity.h:35, 来自/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../include/c++/4.8.3/bits/ios_base.h:39, 来自/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../include/c++/4.8.3/ios:42, 来自/usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../include/c++/4.8.3/ostream:38, 来自 /usr/lib/gcc/x86_64-redhat-
....
/usr/include/pthread.h:232:12: 错误:初始化参数 3'int pthread_create(pthread_t*, const pthread_attr_t*, void* ()(void), void*)' [ -fpermissive] extern int pthread_create (pthread_t *__restrict __newthread,
我在这里遗漏了什么吗? 提前致谢!
【问题讨论】:
-
那么这里有什么解决方案..
-
关键字
struct在c++的struct myStruct readArgs;中是可选的 -
实际代码中声明的,粘贴时遗漏了。已编辑。
-
你为什么不直接使用
struct的成员而不是创建无关的局部变量?局部变量bufffer、fileP、fileP2的用途是什么?它们没有任何作用,您的main只是在分配给他们的不必要的工作,然后您将它们分配给您的结构的成员。 -
@bhagyeshdudhediya -- 你不需要那些额外的局部变量。直接使用
struct中的成员变量即可(readArgs.fp.open(...);) 其次,buffer是未初始化的指针,你的代码正试图在那个状态下使用它。
标签: c++ multithreading c++11 fstream