来源:http://www.cnblogs.com/clever101
下面的一段代码:
#include"stdafx.h"
#include<iostream>
classPoint3d
{
public:
Point3d(floatx=0.0,floaty=0.0,floatz=0.0)
:_x(x),_y(y),_z(z)
{
}
floatGetX(){return_x;}
floatGetY(){return_y;}
floatGetZ(){return_z;}
inlinestd::ostream&operator<<(std::ostream&out)const
{
out<<GetX()<<""<<GetY()<<""<<GetZ()<<std::endl;
returnout;
}
private:
float_x,_y,_z;
};
VS C++2005编译出现下面错误:
1>d:\algorithmic\searchnum\console\console.cpp(21) : error C2662:“Point3d::GetX”: 不能将“this”指针从“const Point3d”转换为“Point3d
&”
1>转换丢失限定符
1>d:\algorithmic\searchnum\console\console.cpp(21) : error C2662:“Point3d::GetY”: 不能将“this”指针从“const Point3d”转换为“Point3d
&”
1>转换丢失限定符
1>d:\algorithmic\searchnum\console\console.cpp(21) : error C2662:“Point3d::GetZ”: 不能将“this”指针从“const Point3d”转换为“Point3d
&”
原因在于带const修饰符的接口会把this指针转化为为const this类型。网上一种解决办法是,把需要调用的非const接口都改为const,如上例的GetX、GetY和GetZ函数改为:
floatGetX()const{return_x;}
floatGetY()const{return_y;}
floatGetZ()const{return_z;}
我想到的一种办法是可以直接在内部将const修饰符去掉,具体如下:
out<<(const_cast<Point3d*>(this))->GetX()<<""<<(const_cast<Point3d*>(this))->GetY()<<""<<(const_cast<Point3d*>(this))->GetZ()<<std::endl;
分享到:
相关推荐
下面我们将深入探讨"Class and Pointer"这个主题,主要关注C++中类中的指针使用。 首先,让我们理解类(class)的基本概念。类是C++中面向对象编程的基础,它定义了一组数据成员(变量)和成员函数(方法),这些...
### c语言const的用法详解 #### 一、概述 `const`关键字是C语言中的一个非常重要的概念,主要用于声明不可变的变量或指针。它可以帮助程序员更好地控制程序的行为,减少错误的发生,并提高代码的可读性和维护性。...
C语言const用法小结 const 是 C 语言中一种非常重要的关键字,它可以用来修饰变量、指针、函数返回值、函数参数和成员函数等。 const 的使用可以提高代码的安全性和可读性,本文将对 const 的各种用法进行总结。 1...
在IT行业中,`const`关键字和类(class)是C++编程语言中的核心概念,它们在软件设计和实现中扮演着重要角色。本篇将详细阐述`const`关键字与类在Linux开发环境中的应用和重要性。 首先,我们来看`const`关键字。在...
在C语言中,`const`关键字是一个非常重要的概念,它用于定义常量或者声明只读变量。`const`的使用可以提升代码的可读性、安全性和效率,防止无意间修改不应变动的数据。本文将详细讲解`const`的多种用法和其在编程中...
GetPrivateProfileString(section.c_str(), key.c_str(), defaultValue.c_str(), buffer, size, filePath_.c_str()); return buffer; } int IniFile::ReadInt(const std::string& section, const std::string& ...
### C语言中const定义常量 #### 一、引言 C语言作为一种广泛使用的编程语言,在软件开发领域占据着极其重要的地位。为了更好地理解和运用C语言中的特性,掌握`const`关键字的使用变得尤为重要。本文将详细介绍如何...
1. 指向常量的指针(pointer to const):指向的数据是const,不允许通过这个指针来修改数据,但指针变量本身的值可以改变。 2. 常指针(const pointer):指针变量的值不能被改变,即指针的指向不能改变,但它所...
在C语言中,const是一个非常重要的关键字,它被用于声明一个变量是常量,即其值在初始化之后就不能被改变。常量可以是整型、浮点型、字符型等多种基本数据类型,也可以是复合类型如指针或数组等。使用const关键字...
另一种解决办法是在`Edge`类模板之前进行`operator函数模板的前向声明: ```cpp template <class T> ostream& operator(ostream& os, const Edge<T>& e); template <class Vertex> class Edge { friend ostream& ...
// const pointer to const pointer to const char ``` 这些声明分别定义了不同类型的指针,包括指向字符的指针、指向常量字符的指针、指向指针的指针等。例如: - `char **p1;`:`p1`是一个指向字符指针的指针。 ...
non-const lvalue reference cannot bind to rvalue(解决方案).md
class string{ friend int len(string &); friend const string & operator+(const string &s1,const string &s2); friend std::ostream & operator(std::ostream &theStream,const string & str); friend const...
Course(const std::string& id, const std::string& name, const std::string& instructor, int credit) : courseID(id), courseName(name), instructorName(instructor), creditHours(credit) {} // getter 和 ...
const 可以修饰类的数据成员,例如:class A{const int size;… }。const 数据成员只在某个对象生存期内是常量,而对于整个类而言却是可变的。因为类可以创建多个对象,不同的对象其 const 数据成员的值可以不同。...
int obj_size() const { return sizeof(*this); } const char* GetData()const { return buffer; } const char* c_str()const { return buffer; } bool operator == (const TinyString& other) const; ...
C 语言之 const 用法 const 关键字是一个非常重要的概念在 C 语言中,它可以用来限定变量、指针和函数的行为,让程序更加安全和可靠。下面我们来详细介绍 const 的用法和相关知识点。 1. const 的普通用法 const ...
在C++和C编程语言中,`const`关键字是一个非常重要的概念,它涉及到常量、常量指针、指针常量以及常量指针常量等多方面的知识。`const`关键字的主要作用是限制变量的修改,以提高程序的安全性和可读性。下面将详细...
This separates the implementation from the class definition, while still allowing the implementation to be included where necessary. Another use of -inl.h files is for definitions of function ...
// pointer to const pointer to const char char **const p5; // const pointer to pointer to char ``` #### 解析复杂声明的方法 解析复杂声明的一个常用方法是从右向左读取,这被称为“右左法则”。具体步骤...