使用“接口”时在类中没有声明成员函数
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++ 的新手,但显然不知道那些被称为包含警卫)。打开任何标准标题,例如 您不能定义SymbolabFormatter::matrixString
,除非您将其声明为类的成员函数。
在基类中声明成员函数并不等同于在派生类中声明。
【讨论】:
但是根据那个教程link它可以工作...... 您可以通过派生类调用基类的成员函数(有一些约束),但不能像在派生类中声明的那样定义它们。 那个教程没有使用static
。
@AlanStokes,无论函数是否为static
,问题都是一样的。只有在类中声明函数时,才能使用Symbolab::
范围定义函数。以上是关于使用“接口”时在类中没有声明成员函数的主要内容,如果未能解决你的问题,请参考以下文章