2016-07-30 33 views
0

工作我有我新的C的結構運算符=不與fstream的

struct myStruct { 
    fstream fp; 
    char *buffer; 
    size_t size; 
}; 

++和試圖寫一個代碼,其中一個線程將從文件讀入緩衝器和主線程將寫入緩衝器到其他文件。代碼的示例如下:

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); 
} 

,當我編譯我的代碼,我得到以下錯誤:

error: use of deleted function 'std::basic_fstream& std::basic_fstream::operator=(const std::basic_fstream&)' readArgs.fp = fileP;

AND

error: invalid conversion from 'void* ()(myStruct)' to 'void* ()(void)' [-fpermissive] pthread_create(&tid1, NULL, Read, &readArgs); ^ In file included from /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, from /usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../include/c++/4.8.3/x86_64-redhat-linux/bits/gthr.h:148, from /usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../include/c++/4.8.3/ext/atomicity.h:35, from /usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../include/c++/4.8.3/bits/ios_base.h:39, from /usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../include/c++/4.8.3/ios:42, from /usr/lib/gcc/x86_64-redhat-linux/4.8.3/../../../../include/c++/4.8.3/ostream:38, from /usr/lib/gcc/x86_64-redhat-
....
/usr/include/pthread.h:232:12: error: initializing argument 3 of 'int pthread_create(pthread_t*, const pthread_attr_t*, void* ()(void), void*)' [-fpermissive] extern int pthread_create (pthread_t *__restrict __newthread,

我是在這裏丟失什麼? 在此先感謝!

+0

那麼可以在這裏得到什麼解決方案 –

+0

在'struct myStruct readArgs;'中爲關鍵字'struct'是可選的C++ – sjsam

+0

它在實際代碼中聲明,在此處粘貼時錯過。編輯它。 –

回答

0

找到了答案..
1. fstream - fstream不能使用=分配,但可以移動。 swap()也沒有工作,因爲gcc版本。我有gcc版本4.8.3.x,我猜不支持swap()調用fstream
2. pthread_create() - 它需要簽名void *foo(void *)的功能,因此當您處於所需功能時,必須傳遞所需參數並進行類型轉換。
在這裏,我會做這樣的:

pthread_create(&tid1, NULL, Read, &readArgs); 

Read()功能是:

void *Read(void *args) { 
    myStruct *readA = (myStruct *)args; 
    .... 
} 

謝謝大家的時間!