如代码所示,我创建了一个类 Punkt
(在德语中表示点)。它是一个 array[2]
类型,用于保存 x 和 y 轴数据。代码还没有写完正确,我只是想一步步上手。
行:
bool contains (Punkt &p){
Punkt ConTemp;
*ConTemp = &p;
正在引起问题。用代码块编译它给我错误:
no match for operator [] (operand types arr punkt and int ).
问题出在哪里?
enter code here
#include <iostream>
#include <array>
using namespace std;
class Punkt {
public: int XYCoord [2]={};
void setupCoord (int x, int y){
XYCoord[0]=x;
XYCoord[1]=y;
}
};
class Rechteck {
Punkt ReCoordLu,ReCoordRo;
double flaeche(double x, double y){
double xy=x*y;
return xy;
}
bool contains (Punkt &p){
Punkt ConTemp;
*ConTemp = &p;
if (ConTemp[0]>=&&ReCoordLu[0]&&ConTemp[1]>=&&ReCoordLu[1]&&
ConTemp[0]<=&&ReCoordRo[0]&&ConTemp[1]<=ReCoordRo[1]){
return true;}
else{
return false;}
};
bool contains (Rechteck &){
if (1){
return true;}
else
return false;
}
};
int main()
{
/* Rechteck sharedRectangle (Rechteck a , Rechteck b){
Rechteck c;
return Rechteck c;
} */
Punkt P1,P2;
P1.setupCoord(1,1);
P2.setupCoord(5,5);
cout<<"hello"<<P2.XYCoord[0];
return 0;
};
最佳答案
你具体问的问题是因为你声明了
ConTemp
作为 Punkt
- 然后您尝试使用一元 *
间接通过它。修复只是用 p
初始化 ConTemp
。
bool contains (const Punkt &p){ // Better to take by const ref where possible.
Punkt ConTemp = p; // Initilize
您的测试也非常困惑。你有:
if (ConTemp[0]>=&&ReCoordLu[0]&&ConTemp[1]>=&&ReCoordLu[1]&&
ConTemp[0]<=&&ReCoordRo[0]&&ConTemp[1]<=ReCoordRo[1]){
应该是:
if (ConTemp.XYCood[0]>=ReCoordLu.XYCood[0]&&ConTemp.XYCood[1]>=ReCoordLu.XYCood[1]&&
ConTemp.XYCood[0]<=ReCoordRo.XYCood[0]&&ConTemp.XYCood[1]<=ReCoordRo.XYCood[1]){
但就我个人而言,我会重写为:
if (ReCoordLu.XYCood[0] <= ConTemp.XYCood[0] &&
ConTemp.XYCood[0] <= ReCoordRo.XYCood[0] &&
ReCoordLu.XYCood[1] <= ConTemp.XYCood[1] &&
ConTemp.XYCood[1] <= ReCoordRo.XYCood[1]){
在处理多重比较时,如果它们都在同一个方向,我发现它更容易阅读。
我还会将 XYCoord
重命名为 xy
。它使代码更短。
关于c++ - selfcreates 类数组 [2] 导致问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42553999/