gpt4 book ai didi

c++ - 遍历指向类的指针 vector

转载 作者:行者123 更新时间:2023-11-28 00:28:35 25 4
gpt4 key购买 nike

所以我遇到了一个问题,我试图获取一艘船的坐标并返回一个指针。但是我遇到了一个问题,即编译器没有检测到我为我的船类创建的私有(private)变量。

在我的 .h 文件中。

#ifndef BOARD_H
#define BOARD_H
#include "Ship.h"
#include<vector>
class Board
{

private:
std::vector<Ship *> shipList;
char score[10][10];
Ship *shipAt(int x, int y);
};
#endif

我的 ship.h 文件中的相关变量

private: 
int x1,y1,x2,y2;

我的功能

Ship *Board::shipAt (int x, int y){

vector <Ship*> :: iterator locate; //locating the appropiate ship with this iterator

for ( locate = shipList.begin(); locate != shipList.end() ; locate++ ){
if( *locate.x1 == *locate.x2){
if(( y <= *locate.y1 && y >= *locate.y2) || (y <= *locate.y2 && y >= *locate.y1)){
return locate;
}
}

else if ( *locate.y1 == *locate.y2){
if(( x <= *locate.x1 && x >= *locate.x2) || ( x <= *locate.x2 && *locate.x1)){
return locate;
}
}
}
}


I'm getting the error

Board.cpp:54:15: error: ‘std::vector<Ship*>::iterator’ has no member named ‘x1’
if( *locate.x1 == *locate.x2){
^
Board.cpp:54:29: error: ‘std::vector<Ship*>::iterator’ has no member named ‘x2’
if( *locate.x1 == *locate.x2){

最佳答案

您遇到的第一个问题是运算符优先级。您正在尝试取消引用 locate.x1 而实际上您想要做的是首先取消引用 locate 以获取指针,然后访问 x1成员(member)。所以你想要的代码是 (*locate).x1 (见下一段)

那么你还有另外两个问题。由于您有一个指针,因此要访问 x1,您需要使用 ->,而不是“.”。

最后你会遇到可见性问题,因为 x1 是私有(private)的。

错误信息给你一个很好的诊断:

error: ‘std::vector<Ship*>::iterator’ has no member named ‘x2’

编译器告诉您 iterator 类型没有成员 x2,这应该是您正在尝试访问 x2 的提示> 来自错误类型的对象。您正在尝试从 Ship 访问 x2。

关于c++ - 遍历指向类的指针 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23861102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com