2016-03-16 19 views
0

我試圖創建函數,獲取二進制文件,寫入和讀取函數的指針。 的功能都需要得到:cpp指針函數寫入二進制文件

1)的char *(上寫功能的char *是指從巫地址寫入,和讀出功能的char *的意思是,巫婆地址讀取)

2)INT(上寫多少個wirte和多少個讀取的讀取函數)的地址。

我想創建函數獲取指針的讀/寫,但我得到了一個錯誤 我的代碼。

#include <iostream> 
using namespace std; 
#include <fstream> 

void func(void(*funcToCall)(char*, int)) 
{ 
    char * temp= "zzz"; 
    funcToCall(temp, 3); 
} 
int main() 
{ 
    fstream dskfl; 
    dskfl.open("aa.txt", ios::out | ios::binary); 
    dskfl.close(); 
    dskfl.open("aa.txt", ios::out | ios::in | ios::binary); 

    char ddd[]= "fffff"; 
    dskfl.write((char*)ddd, 5); 
    dskfl.seekp(0); 

    func(dskfl.write); 
    dskfl.close(); 
} 

我得到線

func(dskfl.write); 

Error 1 error C3867: 'std::basic_ostream<char,std::char_traits<char>>::write': function call missing argument list; use '&std::basic_ostream<char,std::char_traits<char>>::write' to create a pointer to member 

爲什麼錯誤嗎?

+0

你需要兩條信息來調用一個類的方法 - instan課程的內容和方法。 'fstream * instance = &dskfl;'和'void(fstream :: * method)(char *,int)=&fstream :: write;'然後使用'(instance - > * method)(char *,int)'來調用方法。 – Vishal

+0

@Vishal 我改變到 「空隙FUNC(fstream的*實例,空隙(fstream的:: *方法)(字符*,INT))」 等 \t FUNC(&dskfl,&(fstream的 和呼叫的功能::寫)); 我得到錯誤 \t \t 4智能感知:類型的std :: basic_ostream <炭的std :: char_traits >&(標準:: basic_ostream <炭的std :: char_traits > :: *)(常量的」參數char * _Str,std :: streamsize _Count)「與參數類型」void(std :: basic_fstream > :: *)(char *,int)「不兼容 – jordan

回答

0

可以使用lambda

例如:

改變你的外在FUNC的簽名收到std::function

void func(std::function<void(char*, int)>&& funcToCall) 

,並調用它像這樣:

func([&dskfl](char* c, int i){ dskfl.write(c, i); });