这个问题在这里已有答案:
我将在C书中介绍Nicola Josuttis的OOP,并使用Code Blocks IDE对他的代码进行试验 . 我很难理解编译器错误消息 . 我创建了一个简单的类接口(frac1.hpp),一个类(frac1.cpp)和一个带main() - (ftest.cpp)的测试 . 该类接受两个整数,它们作为分数打印出来 . 如果调用w / o任何参数,则类构造函数设置默认值0;如果使用1参数调用则设置整数值;如果使用2个参数调用,则设置分数 . 如果传递一个或两个参数,则没有编译错误 . 但是如果没有传递参数,我希望构造函数初始化为0,而不是我得到关于print语句是“非类型”的编译器错误 . 就好像没有创建对象 . 非常感谢任何有关我所做错事的帮助或解释 . 谢谢你的考虑 .
课程描述:
//frac1.cpp
#include "frac1.hpp"
#include <iostream>
#include <cstdlib>
//default constructor
Fraction::Fraction() : numer(0), denom(1) //initialize fraction to 0
{
//no further statements
}
Fraction::Fraction(int n) : numer(n), denom(1) //whole integer initialization
{
//no further statements
}
Fraction::Fraction(int n, int d) : numer(n), denom(d)
{
if (d==0) {
std::cerr << "error: denominator is 0" <<std::endl;
std::exit(EXIT_FAILURE);
}
}
void Fraction::print()
{
std::cout<<numer<<'/'<<denom<<std::endl;
}
界面描述:
//frac1.hpp
#ifndef FRAC1_HPP_INCLUDED
#define FRAC1_HPP_INCLUDED
#include <istream>
#include <cstdlib>
namespace CPPDemo {
// Fraction Class
class Fraction {
private:
int numer, denom;
public:
Fraction();
Fraction(int);
Fraction(int,int);
void print();
};
}
#endif // FRAC1_HPP_INCLUDED
测试文件说明:
//ftest.cpp
#include "frac1.hpp"
#include <iostream>
#include <cstdlib>
int main()
{
CPPDemo::Fraction y();
y.print(); //flagged as compiler error**
}
来自编译器的消息:
C:\ Users \ User \ Desktop \ CPPDemo \ FractionClassTest \ ftest.cpp:9:错误:请求'y'中的成员'print',这是非类型'CPPDemo :: Fraction()'
3 回答
将测试文件更改为:
如果没有(),编译器就不会将y.prints视为函数调用 . 我对C语法规则的了解不足以给出更好的解释 . 抱歉 .
更改
至
因为第一个声明了一个函数,所以它不会声明你想要的对象 . 打印功能需要括号(我不知道**是什么)
你忘了函数括号
()
.尝试
哦,该死的,这让我又来了 . 您还需要修复instanciation