我有istreams的util.h /的.cpp與運營商的重載>>,它看起來像如何鏗鏘從GCC的不同之處是如何找到的聲明
// util.h
//
// ... lots of stuff ...
std::istream& operator>>(std::istream& is, const char *str);
std::istream& operator>>(std::istream& is, char *str);
而且
// util.cpp
//
// lots of stuff again
//! a global operator to scan (parse) strings from a stream
std::istream& operator>>(std::istream& is, const char *str){
parse(is, str); return is;
}
//! the same global operator for non-const string
std::istream& operator>>(std::istream& is, char *str){
parse(is, (const char*)str); return is;
}
在其他一些文件我用這種構造是這樣的:
std::istream file;
char *x, *y;
// opening and allocating space for strings comes here
file >> "[ " >> x >> "," >> y >> " ]";
這個工作非常順利地使用GCC/G ++,但現在我想用c(v 4.6.3)。郎(V 3.0),並得到了錯誤的陳述,即適當的操作符重載無法找到:
clang -ferror-limit=1 -g -Wall -fPIC -o ors.o -c ors.cpp
ors.cpp:189:21: error: invalid operands to binary expression ('std::istream' (aka 'basic_istream<char>') and 'const char [2]')
file >> "[ " >> x >> "," >> y >> " ]";
~~~~^~~~~
/usr/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.6.3/../../../../include/c++/4.6.3/istream:121:7: note: candidate function
not viable: no known conversion from 'const char [2]' to '__istream_type &(*)(__istream_type &)' for 1st argument;
operator>>(__istream_type& (*__pf)(__istream_type&))
[[ lots of other possible candidates from the stl ]]
爲什麼鐺無法找到相應的聲明,而GCC有沒有問題。我怎樣才能解決這個問題?
你能告訴我們你在每個文件中包含了什麼嗎?也許g ++的實現是包含clang不是的另一個頭。 – 2012-03-12 14:15:45
當您詢問有關編譯器不同行爲的問題時,始終建議您發佈一個小型可編譯代碼示例。 – 2012-03-12 14:17:43
我將嘗試獲得最小的可編譯示例。 – hildensia 2012-03-12 14:18:08