我是这个网站的新手,在做了一些研究之后我找不到类似于我的问题(有些问题看起来像我的但是他们的代码不同)
所以基本上我要做的是用所有不同的颜色值表示帧缓冲矩阵。我正在编写一个名为“Point”的类,我有一个构造函数,使用默认参数,这里是:
Point.h
#ifndef POINT_H
#define POINT_H
#include <iostream>
class Point
{
protected:
int x;
int y;
public:
Point(int=0,int=0);
Point(const &Point);
void showC() const;
static void showC(Point);
virtual ~Point();
};
#endif // POINT_H
Point.cpp
#include "Point.h"
using namespace std;
Point::Point(int a,int b)
{
x=a;
y=b;
}
Point::~Point()
{}
void Point::showC() const
{ cout << x << " " << y << endl; }
void Point::showC(Point P)
{ cout << P.x << " " << P.y << endl; }
但问题是当我尝试编译程序时
的main.cpp
#include <iostream>
#include "Point.h"
using namespace std;
int main()
{
Point P1;
Point P2(2);
Point P3(4,-7);
cout << "Call of function member showC\n";
P1.showC();
P2.showC();
P3.showC();
cout << "Call of static function showC\n";
Point::showC(P1);
Point::showC(P2);
Point::showC(P3);
return 0;
}
创建Point P2时出错:
在我读到的所有其他问题上,要么它不是同一个问题,要么除了带有默认参数的构造函数之外还有默认构造函数,这会导致在没有参数的情况下创建对象时使用哪个构造函数的歧义。
在我正在阅读的一本关于提高c ++技能的书中,有一些样本正在以某种方式运作,这就是我不理解的原因
以下是样本:
的main.cpp
class point
{
private :
int x;
int y;
Point (int abs=0, int ord=0) //inline constructor
{x=abs; y=ord;}
bool coincide(point);
};
bool point::coincide(point pt)
{ return ( (pt.x==x) && (pt.y==y) );
}
int main()
{
point a, b(1), c(1,0);
cout << "a and b : " << a.coincide(b) << " ou " b.coincide(a) << "\n"
cout << "b et c : " << b.coincide(c) << " ou " << c.coincide(b) << "\n"
}
但是他将所有内容分组到main.cpp文件中,并且他的构造函数是内联的。
任何人都可以向我解释为什么样本有效,为什么我的程序没有?我想有一种我不明白的机制......
提前致谢
重新编辑:我复制了所有代码
答案 0 :(得分:0)
我认为你正在混合创建类
的python和c ++方式 python使用:
类Point:
用于在课堂上声明,c ++使用{}
,如类Point {};
下面通过更改类声明来实现。
刚刚在构造函数中添加了一个cout
#include <iostream>
#include <vector>
using namespace std;
class Point
{
private:
int x;
int y;
public:
Point(int=0,int=0);
};
Point::Point(int a, int b)
{
x = a;
y = b;
cout<<x<<y<<endl;
}
int main()
{
Point P1;
Point P2(2);
Point P3(4,-7);
return 0;
}
输出
00
20
4-7
Program ended with exit code: 0
问题编辑后 删除你的马车线,它完美地运作
Point(const &Point);
#include <iostream>
#include <vector>
using namespace std;
class Point
{
protected:
int x;
int y;
public:
Point(int=0,int=0);
//Point(const &Point);
void showC() const;
static void showC(Point);
virtual ~Point();
};
Point::Point(int a,int b)
{
x=a;
y=b;
}
Point::~Point()
{}
void Point::showC() const
{ cout << x << " " << y << endl; }
void Point::showC(Point P)
{ cout << P.x << " " << P.y << endl; }
int main()
{
Point P1;
Point P2(2);
Point P3(4,-7);
cout << "Call of function member showC\n";
P1.showC();
P2.showC();
P3.showC();
cout << "Call of static function showC\n";
Point::showC(P1);
Point::showC(P2);
Point::showC(P3);
return 0;
}
输出
Call of function member showC
0 0
2 0
4 -7
Call of static function showC
0 0
2 0
4 -7
Program ended with exit code: 0
编辑后我想你想使用复制构造函数只需将其改为
Point(const Point &p2) {x = p2.x; y = p2.y; }