首页 文章

在'y'中请求成员'print',这是非类型[复制]

提问于
浏览
0

这个问题在这里已有答案:

我将在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 回答

  • 2

    将测试文件更改为:

    int main()
      {
      CPPDemo::Fraction y;
      y.print();  //flagged as compiler error**
      }
    

    如果没有(),编译器就不会将y.prints视为函数调用 . 我对C语法规则的了解不足以给出更好的解释 . 抱歉 .

  • 1

    更改

    CPPDemo::Fraction y();
    **y.print;
    

    CPPDemo::Fraction y;
    y.print();
    

    因为第一个声明了一个函数,所以它不会声明你想要的对象 . 打印功能需要括号(我不知道**是什么)

  • 2

    你忘了函数括号 () .

    尝试

    y.print()
    

    哦,该死的,这让我又来了 . 您还需要修复instanciation

    CPPDemo::Fraction y;
    

相关问题