c++ -错误:在'{'标记之前期望的类名
C++ - error: expected class-name before ‘{’ token
我在编译这个类时遇到了麻烦。我试图继承StoreQueryResult
对象,该对象持有MySQL查询的结果/行,以便为数组下标操作符
代码
/* MySQLQueryResult.h */
#ifndef MYSQLQUERYRESULT_H
#define MYSQLQUERYRESULT_H
#include <mysql++.h>
#include <result.h>
namespace MinesScanner {
namespace MoonStone {
class MySQLQueryResult : protected StoreQueryResult {
public:
MySQLQueryResult();
MySQLQueryResult(const MySQLQueryResult &other);
MySQLQueryResult& operator=(const MySQLQueryResult &other);
MySQLQueryResult& operator[](int index);
private:
double empty_val = 0.0;
};
}
}
#endif /* MYSQLQUERYRESULT_H */
和相应的源文件
/* MySQLQueryResult.cpp */
#include "MySQLQueryResult.h"
namespace MinesScanner {
namespace MoonStone {
MySQLQueryResult::MySQLQueryResult( )
{
StoreQueryResult( ) ;
}
MySQLQueryResult::MySQLQueryResult( const MySQLQueryResult &ob )
{
StoreQueryResult( const StoreQueryResult & ob ) ;
}
MySQLQueryResult& MySQLQueryResult::operator=( const StoreQueryResult &ob )
{
StoreQueryResult::operator=( ob ) ;
return *this ;
}
MySQLQueryResult& MySQLQueryResult::operator[]( int index )
{
try {
Row *val = ( *this ).at( index ) ;
return *val ;
} catch ( std::out_of_range& excpn_ob ) {
return *empty_val ;
}
}
}
}
gcc在编译
时报告此错误./MySQLQueryResult.h:20:61: error: expected class-name before ‘{’ token
./MySQLQueryResult.cpp: In constructor ‘MinesScanner::MoonStone::MySQLQueryResult::MySQLQueryResult()’:
./MySQLQueryResult.cpp:16:22: error: ‘StoreQueryResult’ was not declared in this scope
下面是make文件
中的行CXX := g++
CXXFLAGS := -Wall -g -std=c++11 -I/usr/bin/include/mysql++ -I/usr/include/mysql
LDFLAGS := -L/usr/lib64 -lmysqlpp -lnsl -lz -lm -L/usr/lib64/mysql -lmysqlclient -lboost_date_time
EXECUTABLE := main
mysqlqueryresult.o : ./Moon_Stone_Scanner/MySQLQueryResult.cpp
${CXX} -c ${CXXFLAGS} ${LDFLAGS} ./Moon_Stone_Scanner/MySQLQueryResult.cpp
main.o: main.cpp
${CXX} -c ${CXXFLAGS} ${LDFLAGS} mysqlqueryresult.o main.cpp
因此,到目前为止,我可以看到mysql++.h
被包括在错误发生的行之前,并且在编译期间也包括在内,但我仍然得到那个说error: expected class-name before ‘{’ token
的错误。请告诉我哪里错了。
那么,有几件事。
-
StoreQueryResult
在mysqlpp
命名空间中。这意味着您需要添加这个名称空间说明符(通过using namespace mysqlpp
或以mysqlpp::
作为前缀)。前者应该只在.cpp
文件中完成。因此,将protected StoreQueryResult
更改为protected mysqlpp::StoreQueryResult
-
在cpp文件中,添加:
using namespace mysqlpp;
(就在顶部的include指令之后)。 -
调用基构造函数时,而不是:
MySQLQueryResult::MySQLQueryResult( ) { StoreQueryResult( ) ; } MySQLQueryResult::MySQLQueryResult( const MySQLQueryResult &ob ) { StoreQueryResult( const StoreQueryResult & ob ) ; }
:
MySQLQueryResult::MySQLQueryResult( ) : StoreQueryResult() { } MySQLQueryResult::MySQLQueryResult( const MySQLQueryResult &ob ) : StoreQueryResult( ob ) { }
-
您的
MySQLQueryResult& MySQLQueryResult::operator=( const StoreQueryResult &ob )
在头文件中丢失。添加这个:MySQLQueryResult& operator=(const mysqlpp::StoreQueryResult &ob);
-
你的
[]
操作符在我看来很可疑。empty_val
在我所知的任何地方都没有定义
可能与您的设置无关,但我也不得不将-I/usr/include/mysql++
添加到makefile中。
将StoreQueryResult
更改为mysqlpp::StoreQueryResult
。命名空间为mysqlpp
- 提升精神 x3 错误处理程序与期望
- 我一直得到一个期望;错误,我不确定为什么
- 使用 gtest EXPECT_CALL 时竞争条件段错误,而另一个期望是执行相同的方法
- Variadic模板:候选人期望1个参数,0提供(扣除错误)
- 我有 3 个错误:期望一个")",期望一个表达式,long 类型的参数与 U32 类型的参数不兼容
- 错误:“;期望的类名”;
- 错误C2057:期望的常量表达式
- 错误:')'令牌强制转换问题之前期望的主表达式
- Boost Python运行时错误,将派生类型的对象从Python传递给c++函数,期望将shared_ptr传递给基类
- 语法错误,意外的标记,期望文件结束
- 错误:当通过P2P通道连接两个NodeContainers时,期望主表达式在ns3中的const之前
- 错误:':'令牌之前期望的初始化项
- c++ -错误:在'{'标记之前期望的类名
- 错误:期望声明
- 试图为继承类的子类编写构造函数,猜测语法,期望的主表达式错误
- if语句中的函数:期望的错误表达式
- 编译错误:solution.c:20:5: Error:期望的标识符或'('在' {' token{之前
- QT 5.2.1编译错误;在'delete'之前期望的非限定id
- 程序没有给出期望的输出.FIFO的错误实现
- 编译时错误:期望的构造函数、析构函数或转换