命名空间?包括错误? [英] namespace? include errors??
问题描述
你们任何人都可以帮忙解决这个问题吗?几乎我所有的错误都属于2
不同类别:
1)错误C2872:含糊不清的符号
2)错误C2662:不能将''this''指针从''const class Vertex''转换为
''class Vertex&''
让我们看看它们:
f:\ my school\cse528\showdxf\vertex.h(9):错误C2872:''ostream'':含糊不清
符号
f:\ my school\cse528\showdxf\vertex.h(9):错误C2872:''ostream'':含糊不清
符号
f:\ my school\cse528\showdxf\triangle.h(9):错误C2872:''ostream'':
模糊符号
f:\ my school\cse528\showdxf\triangle.h(9):错误C2872:''ostream'':
模糊符号
f:\ my school\cse528\showdxf\edge.h(12):错误C2872:''ostream'':含糊不清
符号
f:\ my school\cse528\showdxf\edge.h(12):错误C2872:''ostream'':含糊不清
符号>
f:\ my school\cse528\showdxf\dxfparser.h(34):错误C2872:''ifstream'':
模糊符号
f:\ my school\cse528\showdxf\dxfparser.h(35):错误C2872:''ifstream'':
模糊符号
f: \ my school\cse528 \showdxf \dxfparser.h(36):错误C2872:''ifstream'':
模糊符号
f:\ my school\cse528 \showdxf \dxfparser.h(37):错误C2872:''ifstream'':
模糊符号
f:\ my school\ cse528 \ showdxf \ dxfparser.h(39):错误C2872:''ifstream'':
模糊符号
f:\ my school\cse528 \ showdxf\drawdxf.cpp(505):错误C2872:''cout'':
模糊符号
f:\ my school\cse528\showdxf\drawdxf.cpp(525):错误C2872:''cout'':
模糊符号
其中例如:
#ifndef FG_VERTEX
#define FG_VERTEX
#include< iostream>
使用namespace std;
class Vertex {
friend ostream& operator<<(ostream&,const Vertex&); <<<<<<<<<第9行
public:
Vertex(float vx,float vy,float vz);
~Vertex(){}; //默认析构函数
float getX(void){return x;}; //返回顶点X坐标
float getY(void){return y;}; //返回顶点Y坐标
float getZ(void){return z;}; //返回顶点Z坐标
void set(float newX,float newY,float newZ);
bool operator<(const Vertex& v)const;
bool operator ==(const Vertex& v)const;
private:
float x,y,z;
} ;
#endif
又一次:
#ifndef FG_DXF_PARSER
#定义FG_DXF_PARSER
#include< fstream.h>
#include" model.h"
class DXFParser {
public:
void read_and_build(char * filename,Model * model);
private:
DXFSection getSection(ifstream is);
void readFace(ifstream是,Model * model);
void readPolyline(ifstream is,Model * model);
float getFloat(ifstream is);
void showError(void);
bool skipToHeader(ifstream is,char * header);
void trim(char * str ,char * trimmed);
};
#endif
让我们看一个例子错误C2662:
f:\ my school\cse528\showdxf\vertex.cpp(17):错误C2662:''getX'':不能
将''this''指针从''const class Vertex''转换为''class Vertex&''
转换失去限定词
f:\ my school\\ \\ cse528 \ showdxf\vertex.cpp(17):错误C2662:''getY'':不能
将''这个''指针从''const class Vertex''转换为''' class Vertex&''
转换失去限定符
f:\ my school\cse528\showdxf\vertex.cpp(17):错误C2662:'' getZ'':不能
将''此''指针从''const class Vertex''转换为''class Vertex&''
转换失去限定词
这里是vertex.cpp代码:
#include< iostream>
#include" vertex.h"
Vertex :: Vertex(float vx,float vy,floa t vz){
x = vx; y = vy; z = vz;
}; //默认构造函数
void Vertex :: set(float newX,float newY,float newZ){
x = newX; y = newY; z = newZ;
};
ostream& operator<<(ostream& out,const Vertex& vertex){
out< ;< "("<<< vertex.getX()<<","<< vertex.getY()<<","<<
vertex.getZ()<<")" ;;
退出;
}; //用于打印
bool Vertex :: operator<(const Vertex& v)const {
if(x< vx)return true;
else if(x == vx&& y< vy)返回true;
else if(x == vx&& y == vy&& z< vz )返回true;
返回false;
};
bool Vertex :: operator ==(const Vertex& v)const {
return(x == vx&& y == vy&& z == vz);
};
有什么想法吗?我在这里真的很困惑!唯一让我这么开心的事情就是那里的人可能知道解决这个问题的原因......
令人沮丧的情况....
注意:错误C2662消失我从运算符<<
定义中删除const,但我甚至不知道这是否正确重载现在
(Deitel的书中显示const)
Francesco Gallarotti写道:class Vertex {
friend ostream& operator<<(ostream&,const Vertex&); <<<<<<<<<
您需要获得std :: here资格。
朋友std :: ostream& operator<<(std :: ostream&,const Vertex& ;);
第9行public:
Vertex(float vx,float vy,float vz);
~Vertex(){}; //默认析构函数
float getX(void){return x;}; //返回顶点X坐标
float getY(void){return y;}; //返回顶点Y坐标
float getZ(void){return z;}; //返回顶点Z坐标
float getX(void)const {return x;};
float getY(void)const {return y;};
float getZ(void)const {return z;};
将它们设为const。他们没有改变对象。
-
WW aka Attila
10月6日星期一2003 13:57:34 GMT,Francesco Gallarotti
< ga ******** @ hotmail.com>写道:
你们任何人都可以帮忙吗?几乎所有的错误我都属于2
不同的类别:
1)错误C2872:含糊不清的符号2)错误C2662:无法转换''this''指针来自''const类Vertex''到
''类Vertex&''
其中例如:
#ifndef FG_VERTEX
#define FG_VERTEX
#include< iostream>
使用命名空间std;
删除以上行!永远不要使用using namespace std在标题中,
因为它产生了你所看到的问题。
class Vertex {
朋友ostream& operator<<(ostream&,const顶点&安培); <<<<<<<<<第9行
朋友std :: ostream& operator<<(std :: ostream&,const Vertex&);
public :
Vertex(float vx,float vy,float vz);
~Vertex(){}; //默认析构函数
float getX(void){return x;}; //返回顶点X坐标
float getY(void){return y;}; //返回顶点Y坐标
float getZ(void){return z;}; //返回顶点Z坐标
void set(float newX,float newY,float newZ);
float getX(void)const {return x;}; //返回顶点X坐标
float getY(void)const {return y;}; //返回顶点Y坐标
float getZ(void)const {return z;}; //返回顶点Z坐标
bool运算符<(const Vertex& v)const;
bool运算符==(const Vertex& v)const;
私有:
浮动x,y,z;
};
#endif
再次:
#ifndef FG_DXF_PARSER
#define FG_DXF_PARSER
#include< fstream.h>
为什么遗留标题?
Tom
" WW" < WO *** @ freemail.hu>写道:
Francesco Gallarotti写道:class Vertex {
friend ostream& operator<<(ostream&,const Vertex&); <<<<<<<<<
你需要获得std :: here资格。
朋友std :: ostream& ;运算符<<(std :: ostream&,const Vertex&);
不,他没有 - 他有一个
使用命名空间std;
在类顶点声明之前。
到OP:永远不要在头文件中使用指令或声明
档。
亲切的问候
frank
-
Frank Schmitt
4SC AG电话:+49 89 700763-0
电子邮件:frankNO DOT SPAMschmitt at 4sc DOT com
Can any of you help with this? Pretty much all the errors I have belong to 2
different categories:
1) error C2872: ambiguous symbols
2) error C2662: cannot convert ''this'' pointer from ''const class Vertex'' to
''class Vertex &''
Let''s see them:
f:\my school\cse528\showdxf\vertex.h(9) : error C2872: ''ostream'' : ambiguous
symbol
f:\my school\cse528\showdxf\vertex.h(9) : error C2872: ''ostream'' : ambiguous
symbol
f:\my school\cse528\showdxf\triangle.h(9) : error C2872: ''ostream'' :
ambiguous symbol
f:\my school\cse528\showdxf\triangle.h(9) : error C2872: ''ostream'' :
ambiguous symbol
f:\my school\cse528\showdxf\edge.h(12) : error C2872: ''ostream'' : ambiguous
symbol
f:\my school\cse528\showdxf\edge.h(12) : error C2872: ''ostream'' : ambiguous
symbol
f:\my school\cse528\showdxf\dxfparser.h(34) : error C2872: ''ifstream'' :
ambiguous symbol
f:\my school\cse528\showdxf\dxfparser.h(35) : error C2872: ''ifstream'' :
ambiguous symbol
f:\my school\cse528\showdxf\dxfparser.h(36) : error C2872: ''ifstream'' :
ambiguous symbol
f:\my school\cse528\showdxf\dxfparser.h(37) : error C2872: ''ifstream'' :
ambiguous symbol
f:\my school\cse528\showdxf\dxfparser.h(39) : error C2872: ''ifstream'' :
ambiguous symbol
f:\my school\cse528\showdxf\drawdxf.cpp(505) : error C2872: ''cout'' :
ambiguous symbol
f:\my school\cse528\showdxf\drawdxf.cpp(525) : error C2872: ''cout'' :
ambiguous symbol
where for example:
#ifndef FG_VERTEX
#define FG_VERTEX
#include <iostream>
using namespace std;
class Vertex {
friend ostream &operator<<(ostream&, const Vertex&); <<<<<<<<< line 9
public:
Vertex(float vx, float vy, float vz);
~Vertex() { }; // default destructor
float getX(void) {return x;}; // returns vertex X coordinate
float getY(void) {return y;}; // returns vertex Y coordinate
float getZ(void) {return z;}; // returns vertex Z coordinate
void set(float newX, float newY, float newZ);
bool operator<(const Vertex& v) const;
bool operator==(const Vertex& v) const;
private:
float x,y,z;
};
#endif
and again:
#ifndef FG_DXF_PARSER
#define FG_DXF_PARSER
#include <fstream.h>
#include "model.h"
class DXFParser {
public:
void read_and_build(char *filename, Model *model);
private:
DXFSection getSection(ifstream is);
void readFace(ifstream is, Model *model);
void readPolyline(ifstream is, Model *model);
float getFloat(ifstream is);
void showError(void);
bool skipToHeader(ifstream is, char *header);
void trim(char *str, char *trimmed);
};
#endif
and let''s see an example of the error C2662:
f:\my school\cse528\showdxf\vertex.cpp(17) : error C2662: ''getX'' : cannot
convert ''this'' pointer from ''const class Vertex'' to ''class Vertex &''
Conversion loses qualifiers
f:\my school\cse528\showdxf\vertex.cpp(17) : error C2662: ''getY'' : cannot
convert ''this'' pointer from ''const class Vertex'' to ''class Vertex &''
Conversion loses qualifiers
f:\my school\cse528\showdxf\vertex.cpp(17) : error C2662: ''getZ'' : cannot
convert ''this'' pointer from ''const class Vertex'' to ''class Vertex &''
Conversion loses qualifiers
here is the vertex.cpp code:
#include <iostream>
#include "vertex.h"
Vertex::Vertex(float vx, float vy, float vz) {
x = vx; y = vy; z = vz;
}; // default constructor
void Vertex::set(float newX, float newY, float newZ) {
x = newX; y = newY; z = newZ;
};
ostream &operator<<(ostream& out, const Vertex& vertex) {
out << "(" << vertex.getX() << "," << vertex.getY() << "," <<
vertex.getZ() << ")";
return out;
}; // for printing
bool Vertex::operator <(const Vertex& v) const {
if(x<v.x) return true;
else if(x==v.x && y<v.y) return true;
else if(x==v.x && y==v.y && z<v.z) return true;
return false;
};
bool Vertex::operator ==(const Vertex& v) const {
return (x==v.x && y==v.y && z==v.z);
};
Any idea? I am getting really confused here! The only thing that makes me
happy here is that maybe somebody out there knows the solution to this
frustrating situation....
NOTE: the errors C2662 go away of I remove the const from the operator<<
definition, but i don''t even know if this is correct overloading now
(Deitel''s book shows "const" in it)
Francesco Gallarotti wrote:class Vertex {
friend ostream &operator<<(ostream&, const Vertex&); <<<<<<<<<
You need to qualify with std:: here.
friend std::ostream &operator<<(std::ostream&, const Vertex&);
line 9 public:
Vertex(float vx, float vy, float vz);
~Vertex() { }; // default destructor
float getX(void) {return x;}; // returns vertex X coordinate
float getY(void) {return y;}; // returns vertex Y coordinate
float getZ(void) {return z;}; // returns vertex Z coordinate
float getX(void) const {return x;};
float getY(void) const {return y;};
float getZ(void) const {return z;};
Make them const. They don''t change the object.
--
WW aka Attila
On Mon, 06 Oct 2003 13:57:34 GMT, "Francesco Gallarotti"
<ga********@hotmail.com> wrote:
Can any of you help with this? Pretty much all the errors I have belong to 2
different categories:
1) error C2872: ambiguous symbols
2) error C2662: cannot convert ''this'' pointer from ''const class Vertex'' to
''class Vertex &''
where for example:
#ifndef FG_VERTEX
#define FG_VERTEX
#include <iostream>
using namespace std;
Delete the above line! Never put "using namespace std" in a header,
since it produces exactly the problems you are seeing.
class Vertex {
friend ostream &operator<<(ostream&, const Vertex&); <<<<<<<<< line 9
friend std::ostream &operator<<(std::ostream&, const Vertex&);
public:
Vertex(float vx, float vy, float vz);
~Vertex() { }; // default destructor
float getX(void) {return x;}; // returns vertex X coordinate
float getY(void) {return y;}; // returns vertex Y coordinate
float getZ(void) {return z;}; // returns vertex Z coordinate
void set(float newX, float newY, float newZ);
float getX(void) const {return x;}; // returns vertex X coordinate
float getY(void) const {return y;}; // returns vertex Y coordinate
float getZ(void) const {return z;}; // returns vertex Z coordinate
bool operator<(const Vertex& v) const;
bool operator==(const Vertex& v) const;
private:
float x,y,z;
};
#endif
and again:
#ifndef FG_DXF_PARSER
#define FG_DXF_PARSER
#include <fstream.h>
Why the legacy header?
Tom
"WW" <wo***@freemail.hu> writes:
Francesco Gallarotti wrote:class Vertex {
friend ostream &operator<<(ostream&, const Vertex&); <<<<<<<<<
You need to qualify with std:: here.
friend std::ostream &operator<<(std::ostream&, const Vertex&);
No, he doesn''t - he has a
using namespace std;
just before the declaration of class Vertex.
To the OP: NEVER put using directives or declarations in header
files.
kind regards
frank
--
Frank Schmitt
4SC AG phone: +49 89 700763-0
e-mail: frankNO DOT SPAMschmitt AT 4sc DOT com
这篇关于命名空间?包括错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!