简单的操作符重载问题
#include <iostream>
#include <string>
class WordCount
{
friend ostream& operator<<(ostream&,const WordCount&);
public:
WordCount(string word,int cnt)
:_word(word),_occurs(cnt)
{}
private:
string _word;
int _occurs;
};
ostream& WordCount::operator<< (ostream& os,const WordCount& wd)
{
os << "<" << wd._occurs << ">" << wd._word;
return os;
}
///////////
#include <iostream>
#include <string>
#include "WordCount.h"
using namespace std;
int main()
{
WordCount wd("sadness",12);
cout << "wd:\n" <<wd <<endl;
return 0;
}
///////////
看不出哪里错了,编译的时候出现了若干错误
:\code_cplus\cplus\wordcount.h(6) : error C2143: syntax error : missing ';' before '&'
d:\code_cplus\cplus\wordcount.h(6) : error C2433: 'ostream' : 'friend' not permitted on data declarations
d:\code_cplus\cplus\wordcount.h(6) : error C2501: 'ostream' : missing storage-class or type specifiers
d:\code_cplus\cplus\wordcount.h(6) : error C2244: 'ostream' : unable to resolve function overload
d:\code_cplus\cplus\wordcount.h(6) : error C2061: syntax error : identifier 'ostream'
d:\code_cplus\cplus\wordcount.h(6) : error C2501: '<<' : missing storage-class or type specifiers
d:\code_cplus\cplus\wordcount.h(6) : error C2805: binary 'operator <<' has too few parameters
d:\code_cplus\cplus\wordcount.h(8) : error C2629: unexpected 'class WordCount ('
d:\code_cplus\cplus\wordcount.h(8) : error C2334: unexpected token(s) preceding ':'; skipping apparent function body
d:\code_cplus\cplus\wordcount.h(12) : error C2146: syntax error : missing ';' before identifier '_word'
d:\code_cplus\cplus\wordcount.h(12) : error C2501: 'string' : missing storage-class or type specifiers
d:\code_cplus\cplus\wordcount.h(12) : error C2501: '_word' : missing storage-class or type specifiers
d:\code_cplus\cplus\wordcount.h(15) : error C2143: syntax error : missing ';' before '&'
d:\code_cplus\cplus\wordcount.h(15) : error C2501: 'ostream' : missing storage-class or type specifiers
d:\code_cplus\cplus\wordcount.h(15) : error C2061: syntax error : identifier 'ostream'
d:\code_cplus\cplus\wordcount.h(16) : error C2501: '<<' : missing storage-class or type specifiers
d:\code_cplus\cplus\wordcount.h(17) : error C2065: 'os' : undeclared identifier
d:\code_cplus\cplus\wordcount.h(17) : error C2297: '<<' : illegal, right operand has type 'char [2]'
d:\code_cplus\cplus\wordcount.h(17) : error C2065: 'wd' : undeclared identifier
d:\code_cplus\cplus\wordcount.h(17) : error C2228: left of '._occurs' must have class/struct/union type
d:\code_cplus\cplus\wordcount.h(17) : error C2228: left of '._word' must have class/struct/union type
D:\Code_Cplus\CPLUS\output.cpp(9) : error C2661: 'WordCount::WordCount' : no overloaded function takes 2 parameters
D:\Code_Cplus\CPLUS\output.cpp(10) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class WordCount' (or there is no acceptable conversion)
Error executing cl.exe.
CPLUS.exe - 23 error(s), 0 warning(s)
请大侠们指教
#include <string>
class WordCount
{
friend ostream& operator<<(ostream&,const WordCount&);
public:
WordCount(string word,int cnt)
:_word(word),_occurs(cnt)
{}
private:
string _word;
int _occurs;
};
ostream& WordCount::operator<< (ostream& os,const WordCount& wd)
{
os << "<" << wd._occurs << ">" << wd._word;
return os;
}
///////////
#include <iostream>
#include <string>
#include "WordCount.h"
using namespace std;
int main()
{
WordCount wd("sadness",12);
cout << "wd:\n" <<wd <<endl;
return 0;
}
///////////
看不出哪里错了,编译的时候出现了若干错误
:\code_cplus\cplus\wordcount.h(6) : error C2143: syntax error : missing ';' before '&'
d:\code_cplus\cplus\wordcount.h(6) : error C2433: 'ostream' : 'friend' not permitted on data declarations
d:\code_cplus\cplus\wordcount.h(6) : error C2501: 'ostream' : missing storage-class or type specifiers
d:\code_cplus\cplus\wordcount.h(6) : error C2244: 'ostream' : unable to resolve function overload
d:\code_cplus\cplus\wordcount.h(6) : error C2061: syntax error : identifier 'ostream'
d:\code_cplus\cplus\wordcount.h(6) : error C2501: '<<' : missing storage-class or type specifiers
d:\code_cplus\cplus\wordcount.h(6) : error C2805: binary 'operator <<' has too few parameters
d:\code_cplus\cplus\wordcount.h(8) : error C2629: unexpected 'class WordCount ('
d:\code_cplus\cplus\wordcount.h(8) : error C2334: unexpected token(s) preceding ':'; skipping apparent function body
d:\code_cplus\cplus\wordcount.h(12) : error C2146: syntax error : missing ';' before identifier '_word'
d:\code_cplus\cplus\wordcount.h(12) : error C2501: 'string' : missing storage-class or type specifiers
d:\code_cplus\cplus\wordcount.h(12) : error C2501: '_word' : missing storage-class or type specifiers
d:\code_cplus\cplus\wordcount.h(15) : error C2143: syntax error : missing ';' before '&'
d:\code_cplus\cplus\wordcount.h(15) : error C2501: 'ostream' : missing storage-class or type specifiers
d:\code_cplus\cplus\wordcount.h(15) : error C2061: syntax error : identifier 'ostream'
d:\code_cplus\cplus\wordcount.h(16) : error C2501: '<<' : missing storage-class or type specifiers
d:\code_cplus\cplus\wordcount.h(17) : error C2065: 'os' : undeclared identifier
d:\code_cplus\cplus\wordcount.h(17) : error C2297: '<<' : illegal, right operand has type 'char [2]'
d:\code_cplus\cplus\wordcount.h(17) : error C2065: 'wd' : undeclared identifier
d:\code_cplus\cplus\wordcount.h(17) : error C2228: left of '._occurs' must have class/struct/union type
d:\code_cplus\cplus\wordcount.h(17) : error C2228: left of '._word' must have class/struct/union type
D:\Code_Cplus\CPLUS\output.cpp(9) : error C2661: 'WordCount::WordCount' : no overloaded function takes 2 parameters
D:\Code_Cplus\CPLUS\output.cpp(10) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class WordCount' (or there is no acceptable conversion)
Error executing cl.exe.
CPLUS.exe - 23 error(s), 0 warning(s)
请大侠们指教
...全文
相关推荐
C++ new、delete(new[]、delete[])操作符重载需要注意的问题
当需要为类或对象分配内存时,程序员可以重载这些操作符以自定义内存管理的行为。然而,重载`new`、`delete`操作符需要注意一些关键问题,以确保正确性和兼容性。1.
C++重载++与--操作符[可运行源码]
开发者在实践中应当关注操作符重载的正确性与效率问题,这不仅涉及到程序逻辑的正确实现,也关乎到程序执行的性能。
C++ 中重载 + 操作符的正确方法
### C++ 中重载 + 操作符的正确方法#### 引言在C++编程中,重载操作符是一项非常实用且强大的功能,能够帮助程序员以自然的方式处理自定义数据类型。
C++操作符重载的变态用途之子类转换
通过操作符重载,可以实现更直观、更具表现力的代码编写方式。然而,过度或不当使用操作符重载可能导致代码难以理解和维护。本文将探讨一种较为少见的操作符重载应用——子类转换,并分析其潜在的问题与局限性。
拷贝构造函数和赋值操作符号的重载.pdf
这是因为默认的赋值操作符会执行“浅拷贝”,可能导致类似拷贝构造函数的问题。重载赋值操作符通常遵循“拷贝-and-swap”策略,这可以确保对象的左值引用和右值引用的正确性,同时避免自赋值问题。


