2015-05-12 15 views
1

我在與C++ inherrited成員函數的麻煩,看看下面的代碼:C++成員函數的多態性問題

binIO_t wtest(path, mode); 
const void* Buff = "abcd"; 
wtest << Buff, 1; //no operator found 
wtest.virtIO_t::operator<<(Buff), 1; //works fine 

精確的編譯器錯誤是:

錯誤1錯誤C2679:二進制「 < <':沒有發現操作符需要類型'void *'的右側操作數(或者沒有可接受的轉換)...

我很狡猾地想念一些細微的減速但我沒有找到它。

我superclass.h是:

#pragma once 
#include <string> 
#include <iostream> 
#include <fstream> 
#include <stdio.h> 

using namespace std; 

class virtIO_t{ 
private: 
    virtIO_t(); 

public: 
    virtIO_t(string filePath, string fileMode); 
    ~virtIO_t(); 

    virtual virtIO_t& operator >> (void* Buf); 
    virtual virtIO_t& operator << (const void* Buf); 

    virtual virtIO_t& operator << (const char val) = 0; 
    virtual virtIO_t& operator >> (char &val) = 0; 
}; 

和superclass.cpp是:

#include "stdafx.h" 
#include "virtIO_t.h" 

virtIO_t::virtIO_t() 
{ 
} 

virtIO_t::~virtIO_t() 
{ 
    ... 
} 

virtIO_t::virtIO_t(string filePath, string fileMode){ 
... 
} 


virtIO_t& virtIO_t::operator << (const void* Buff){ 
    ... 
} 
virtIO_t& virtIO_t::operator >> (void* Buff){ 
    ... 
} 

和sub.h是:

#pragma once 
#include "virtIO_t.h" 

class binIO_t : public virtIO_t{ 

public: 
    binIO_t(string filePath, string mode); 

    virtIO_t& operator << (const char val); 
    virtIO_t& operator >> (char &val); 

和sub.cpp是:

#include "stdafx.h" 
#include "binIO_t.h" 

binIO_t::binIO_t(string filePath, string mode) : virtIO_t(filePath, (string(mode) + "b").c_str()){} 

    virtIO_t& binIO_t::operator << (const char val){ 
    ... 
    } 

    virtIO_t& binIO_t::operator >> (char &val){ 
    ... 
    } 
+1

你認爲這些逗號在做什麼?可能不是你所期望的。 – dwcanillas

+0

@dwcanillas你指的是哪個逗號? – GalB1t

+0

'wtest << Buff,1;' – dwcanillas

回答

1

binIO_t聲明它自己的operator<<它從基類隱藏operator<<(void*)。嘗試using virtIO_t::operator<<指令或在biunIO_t中明確定義operator<<(void*)

另外:, 1什麼都不做。