自我创建级阵列[2]正在引起问题
selfcreates class an array[2] is causing problems
,如代码I创建了一个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;
};
您特别询问的问题是因为您已声明 ConTemp
作为Punkt
-然后尝试使用Unary *
间接通过它。修复程序只是用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
。它使代码短得多。
看来您一起参考和指针都有一些问题。
线
*ConTemp = &p;
试图取消指针,然后分配变量的地址。*()正在删除,&amp;()正在获取地址。这是没有意义的。当代不是指针,因此不能被删除,您不需要第p。
的地址。简单地编写
它将有效 ConTemp = p;
编辑:正如域中所建议的那样,您可以在任何情况下都可以使用P而不是当代。
更详细地了解它:
bool包含(punkt&amp; p);或正如我所写的,bool包含(const punkt&amp; p)const;被称为Punkt的参考。这意味着,P不是某些输入的副本,而是相同的变量。如果P更改,它将向外部更改。但是,除此之外,它的对待与包含的对待并不不同(punkt p)。无需取消给出,没有指针语法,例如 ->。
删除适用于指针(尽管您应该避免使用指针),例如:
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访问当代。这是没有意义的。当代是朋克,朋克没有定义这些。您需要使用当代[0] et cetera或在punkt上定义操作员。
,或者您只需与class punkt {public int x,y;}一起使用。或使punkt又为int [2]。我会尽量避免使用封装概念,并使其成为一种结构,但是在开始时,人们可以尝试使用公共成员变量。建议您在某个时间点发布一些代码以进行评论。
- 使用C++在Qt3D中创建多个视口时出现问题
- 基本的 c++ 问题:如果我在函数中创建某些内容并返回它会发生什么?
- 在解决链表问题时创建一个额外的节点是一个好习惯吗?
- 在 c++ 中创建和访问 4D 向量时出现问题
- 关于在 c++ 中创建公式的问题
- 在C ++ ASIO中,如何为HTTP或HTTPS创建相同的套接字对象(接口/抽象问题?
- 在另一个类中创建类实例时出现问题
- 为什么我的类电影在创建电影实例时遇到问题?
- 我正在尝试创建一个 C++ 贪吃蛇游戏,但我似乎无法绘制第二个高度边框,我该如何解决这个问题?
- 创建堆栈时出现问题!(街机游戏)
- 使用暂停按钮ARDUINO创建灯光序列时出现问题
- 我的代码在创建楼梯图案时出了什么问题
- 创建二进制文件时出现问题
- 在 QLayout 中创建和删除自定义 QWidgets 时出现 RAM 问题
- 创建一个简单的计算器,添加时遇到问题
- 问题创建和返回锯齿状阵列(错误std :: bad_array_new_length)
- 问题创建一个将一些文本放入qtextedit中的问题
- 问题:创建QStackedLayout
- C++问题创建类对象和循环包含
- c++作用域问题:创建一个矩阵类而不浪费空间