如代码所示,我创建了一个类Punkt
(这意味着指向德语)。保持x轴和y轴数据是array[2]
类型。代码还没有完成和正确,我只想逐步开始。
这些行:
bool contains (Punkt &p){
Punkt ConTemp;
*ConTemp = &p;
造成问题。用codeblocks编译它会给我错误:
与operator []不匹配(操作数类型为arr punkt和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;
};
答案 0 :(得分:1)
看起来你的引用和指针都有一些问题。
该行
*ConTemp = &p;
尝试取消引用指针,然后为其分配变量的地址。 *()是解除引用,&amp;()获取地址。这是没有意义的。 ConTemp不是指针,因此无法解除引用,并且您不需要p的地址。
只需编写
即可 ConTemp = p;
编辑:正如评论中提到的domdom,你可以在任何情况下简单地使用p而不是ConTemp。
详细了解,帮助您理解它:
bool包含(Punkt&amp; p);或者我会写它bool contains(const Punkt&amp; p)const;被称为Punkt的参考。这意味着,p不是某些输入的副本,而是相同的变量。如果p被改变,它将向外改变。然而,除此之外,它的处理方式与您包含(Punkt p)的方式不同。不需要解除引用,没有指针语法,如 - &gt;。
取消引用是指针(尽管你应该避免使用指针),例如:
int a = 5;
int* p_a = &a; //now p_a stores the address of a
*p_a = 6; //dereference p_a and assign a new value to it
cout << a << endl; //prints 6
&amp;这里有一些不同于你用来参考的东西,我猜这让你很困惑。你可能想重读一些关于引用和指针的基本教程,但是不要把它作为一个你不熟悉编程的消息,只是一个初学者(至少在C ++中)。
编辑:正如domdom所指出的那样,你也错误地试图用[] -brackets访问ConTemp。这是没有意义的。 ConTemp是Punkt,Punkt没有定义那些。您需要使用ConTemp.XYCoord [0]等,或者在Punkt上定义该运算符。
或者你只是选择Punkt {public int x,y;}。或者让Punkt为int [2]另一个词。我尝试使用封装的概念来避免使用公共成员变量,并使其成为一个结构,但在开始时,可以尝试使用公共成员变量。建议在某个时间点,您发布一些代码以供审查。
答案 1 :(得分:1)
您特别询问的问题是因为您已声明
ConTemp
为Punkt
- 然后您尝试使用一元*
间接通过它。该修复只是使用ConTemp
初始化p
。
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
。它使代码更短。