使用“接口”时在类中没有声明成员函数

Posted

技术标签:

【中文标题】使用“接口”时在类中没有声明成员函数【英文标题】:No member function declared in class when using "interface" 【发布时间】:2016-01-28 20:04:35 【问题描述】:

我想用一些静态方法实现接口 Formatter,然后创建另一个实现这些方法的类。我会这样做:

Formatter.hpp

#include <iostream>
#include <string>
#include "Matrix.hpp"

#ifndef FORMATTER_HPP
#define FORMATTER_HPP

class Formatter 
public:
    /**
     * Retorna uma string que pode ser usada no symbolab para testes
     */
    static std::string matrixString(Matrix* matrix);
    /**
     * Retorna string para symbolab para transposição da matriz
     */
    static std::string transposedMatrixString(Matrix* matrix);
    /**
     * Retorna string para symbolab da soma de duas matrizes
     */
    static std::string matrixSumString(Matrix* m1, Matrix* m2);
    /**
     * Retorna string para symbolab do produto de duas matrizes
     */
    static std::string matrixProductString(Matrix* m1, Matrix* m2);
    /**
     * Retorna string para symbolab da determinante de uma matriz
     */
    static std::string matrixDeterminantString(Matrix* matrix);
;

#endif

SymbolabFormatter.hpp

#include <iostream>
#include "Formatter.hpp"

#ifndef SYMBOLABFORMATTER_HPP
#define SYMBOLABFORMATTER_HPP

class SymbolabFormatter: public Formatter
public:
    SymbolabFormatter();
;

#endif

SymbolabFormatter.cpp

#include "SymbolabFormatter.hpp"
#include <sstream>

std::string SymbolabFormatter::matrixString(Matrix* matrix) 
    ...


std::string SymbolabFormatter::transposedMatrixString(Matrix *matrix) 
    ...


std::string SymbolabFormatter::matrixSumString(Matrix *m1, Matrix *m2) 
    ...


std::string SymbolabFormatter::matrixProductString(Matrix *m1, Matrix *m2) 
    ...


std::string SymbolabFormatter::matrixDeterminantString(Matrix* matrix) 
    ...

但不起作用。当我编译它时,会显示以下错误: Image from compiler

PS.: 抱歉有些语法错误,我的英语很糟糕。

【问题讨论】:

为什么你的#include守卫没有放在你的头文件的顶部? 我是 C++ 新手...我不明白您的问题...我猜 #include 是在正确的位置...如果不是,那么放在哪里? 我说的是 #ifndef FORMATTER_HPP / #define FORMATTER_HPP 和类似的行(你说你是 C++ 的新手,但显然不知道那些被称为包含警卫)。打开任何标准标题,例如 。你在哪里看到这些包括警卫? en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Include_Guard_Macro @PaulMcKenzie 感谢您的解释。 【参考方案1】:

您不能定义SymbolabFormatter::matrixString,除非您将其声明为类的成员函数。

在基类中声明成员函数并不等同于在派生类中声明。

【讨论】:

但是根据那个教程link它可以工作...... 您可以通过派生类调用基类的成员函数(有一些约束),但不能像在派生类中声明的那样定义它们。 那个教程没有使用static @AlanStokes,无论函数是否为static,问题都是一样的。只有在类中声明函数时,才能使用Symbolab:: 范围定义函数。

以上是关于使用“接口”时在类中没有声明成员函数的主要内容,如果未能解决你的问题,请参考以下文章

C ++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)[重复]

如何使用模板声明成员函数? (不是模板类)

C++类中的静态成员函数以及静态成员变量

C++类中的静态成员函数以及静态成员变量

使用受保护和继承时无法访问在类中声明的私有成员

C++要点总结