说我有这个班:
#include <vector>
using namespace std;
class Bag
{
vector<int*> items;
public:
void addItem(int* i)
{
items.push_back(i);
}
const vector<int*> getItems() const
{
return items;
}
};
Run Code Online (Sandbox Code Playgroud)
问题是我想阻止参数项中指针指向的值的更改.但是使用从getItems我返回的向量允许更改指向的值.
现在,为了解决这个问题,我可以将参数项声明为,vector<const int*>但是我也无法更改我的类中的值.有没有其他方法来保护值但仍未在项目声明中使用const?
我有头文件:
#ifndef VIP_TICKET_H
#define VIP_TICKET_H
#include "ticket.h"
class VIPTicket : public Ticket
{
public:
enum VIPType { FIRST_CLASS, FAST_LINE };
VIPType getTicketType() const;
private:
VIPType type;
};
#endif
Run Code Online (Sandbox Code Playgroud)
它是cpp文件
#include "vipTicket.h"
VIPType VIPTicket::getTicketType() const
{
return type;
}
Run Code Online (Sandbox Code Playgroud)
错误说" 错误C2143:语法错误:缺少';' 前'VIPTicket :: getTicketType' "
这个错误很混乱..我想这不是';' 这是缺少的,但可能是我无法用手指代码的其他错误..
这是我想要使用的代码的一个简短示例:
template <class T>
class B
{
public :
bool func1(const T& t)
{
// do something
}
};
class A
{
B<int*> b;
public:
void func2(const int* a)
{
b.func1(a);
}
};
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
错误C2664:'B :: func1':无法将参数1从'const int*'转换为'int*const&'
是一种解决这个问题的方法,而无需更改函数声明和不使用const_cast?
编辑:
问题背后的一些信息
B 实际上是我写的容器类(比如列表)
A 是使用该列表的类
func1 是一个需要查找元素是否在列表中的函数
func2 是一个接收要从列表中删除的元素的函数
假设我有一个指向整数的指针数组(即每个元素都是指向int的指针)
int** ptrArray;
Run Code Online (Sandbox Code Playgroud)
我想阻止更改数组条目指向的整数
我需要把const放在哪里?
1. const int ** ptrArray
2. int const ** ptrArray
3. int *const* ptrArray
4. int ** const ptrArray
Run Code Online (Sandbox Code Playgroud)
对此有什么规定吗?像"第一个const保护数据","第二个const保护指针"等等?
const的位置背后是否有任何逻辑?放置的地方与保护的地方之间有什么联系?
这对我来说是一个令人困惑的问题,如果有人可以给我任何指导或链接,我会真的很高兴我可以阅读更多关于如何以及在何处使用const基于我想要保护的内容(如果我需要使用三维数组中的const或左右)