任务是创建类,它在每个时刻计算其类型的对象。这是我的代码。错误是: 1.对象具有与成员函数不兼容的类型限定符" counter :: print&#34 ;; 2.返回值类型与函数类型不匹配; - 这真的很棒! 我纠正了错误,它给了我一个我无法修复的错误; 1.' void counter :: print(void)':无法转换'这个'指针来自' const计数器'到'反击&'
class counter {
private:
static int count;
public:
counter();
counter(const counter &from);
void print() const;
~counter();
};
counter::counter() {
++count;
}
counter::counter(const counter &from) {
++count;
cout << "Copy constructor:\t";
from.print(); // here is the error
}
void counter::print() const{
cout << "\t Number of objects = " << count << endl;
}
counter::~counter() {
--count;
cout << "Destructor:\t\t";
print();
}
int counter::count = 0;
counter f(counter x);
void main() {
counter c;
cout << "After constructing of c:";
c.print();
cout << "Calling f()" << endl;
f(c);
cout << "After calling f():";
c.print();
}
counter f(counter x) {
cout << "Argument inside f():\t";
x.print();
return x;
}
答案 0 :(得分:1)
首先,改变:
void print();
为:
void print() const;
因为(a)无论如何它都是const
方法,并且(b)您试图在构造函数中的const
上下文中调用它。
对于第二个错误:
void f(counter x) {
cout << "Argument inside f():\t";
x.print();
return x; // 2 - nd error
}
很明显,您无法从void
函数返回值。将其更改为:
counter f(counter x) {
cout << "Argument inside f():\t";
x.print();
return x;
}
或者根本不回复任何东西:
void f(counter x) {
cout << "Argument inside f():\t";
x.print();
}
答案 1 :(得分:0)
void print();
您已声明了非const成员函数,这意味着它不能被const实例调用。
from.print(); // 1 - st error
此处from
的类型为const counter&
,这意味着它无法调用print
函数。而是使你的print
函数为常量。
void print() const;
void counter::print() const { ... }
return x; // 2 - nd error
为什么要从具有void
返回类型的函数返回任何内容?