我在这里做了一个测试,但输出是一个没有结束的循环,我不知道为什么.
实际上,我正在做另一个测试,但是当我写这个时,我不明白循环是如何发生的.它反复输出"ABC".
#include <map>
#include <string>
#include <iostream>
class test
{
public:
std::map <int, int> _b;
test();
test (std::map<int, int> & im);
~test();
};
test::test()
{
std::cout<<"abc";
_b.clear();
_b[1]=1;
test(_b);
}
test::test(std::map <int, int>& im)
{
std::cout<<im[1];
}
test::~test() {};
int main ()
{
test a;
}
Run Code Online (Sandbox Code Playgroud) 我有一个类::
Class Test
{
public:
void Check(){//dosomething};
static void call(){//I want to call check()};
};
Run Code Online (Sandbox Code Playgroud)
因为call()是一个静态成员,所以它不能调用非静态函数,所以我认为在call()中使用Check()是创建Test指针然后指向Check(),但我认为它是不好,有更好的方法吗?我可以在静态函数中重写所有内容,所以我不需要再次调用Check(),但我想要的是重用Check()中的代码并避免重复代码.
我有一个关于二进制兼容性的问题.我有一个类A,它包含一个公共方法foo()和一个属性字符串_foo;
const string foo() {return _foo;}
Run Code Online (Sandbox Code Playgroud)
当我改为
const string& foo(){return _foo;}
Run Code Online (Sandbox Code Playgroud)
它仍然是二进制兼容的吗?谢谢你的帮助!
我想在 my 中使用YY_BUFFER_STATE yy_scan_string(const char *str)和其他功能,我做了以下事情:yyparse()main.cpp
extern "C"{
extern YY_BUFFER_STATE yy_scan_string(const char *str);
}
Run Code Online (Sandbox Code Playgroud)
但是有一个错误error:YY_BUFFER_STATE' does not name a type`,然后我做了:
extern yy_buffer_state;
typedef yy_buffer_state *YY_BUFFER_STATE;
extern int yyparse();
extern YY_BUFFER_STATE yy_scan_buffer(char *, size_t);
Run Code Online (Sandbox Code Playgroud)
但是同样的问题,怎么办,谢谢,非常感谢您的帮助!!
这是 main.cpp 文件。#include "main.h"
#include <string.h>
extern "C"{void scan_string(const char* str);}
int yyparse();
void test::getvalue(int& var)
{
if (var!=0)
std::cout<<"True"<<std::endl;
else
std::cout<<"False"<<std::endl;
}
int main(){
std::string str="T+F";
//how to send str as an Input to parse?
yyparse();
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我在c ++中找到了一个关于布尔转换器,*布尔表达式(语法)解析器的非常好的例子
我现在在想的是做一个进一步的步骤,转换(!T|F)&T成F或者0,这样计算一个很长的布尔表达式非常方便.
有一些使用精神的例子吗?我所做的是首先制作一个计算器,然后让它计算'(T +!F*T)',它等于(T||!F&&T)但是当我输入时(),有一个错误.如何修改?非常感谢!
#include <iostream>
#include <stack>
#include <boost/lexical_cast.hpp>
#include <boost/config/warning_disable.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix.hpp>
using namespace std;
namespace phoenix = boost::phoenix;
namespace qi = boost::spirit::qi;
namespace ascii = boost::spirit::ascii;
struct calculator
{
bool interpret(const string& s);
void do_neg();
void do_add();
void do_sub();
void do_mul();
void do_div();
void do_number(const char* first, const char* last);
int val() const;
private:
stack<int> values_;
int *pn1_, n2_;
void …Run Code Online (Sandbox Code Playgroud) 我试图简单地在这个答案中找到精神解析器:
删除xor运算符和逻辑。我看不到怎么做,我尝试使用
expr_ = or_.alias();
or_ = (and__ >> "or" >> or_ )[ _val = phx::construct<binop<op_or >>(_1, _2) ] | and_ [ _val = _1 ];
and_ = (not_ >> "and" >> and_) [ _val = phx::construct<binop<op_and>>(_1, _2) ] | not_ [ _val = _1 ];
not_ = ("not" > simple ) [ _val = phx::construct<unop <op_not>>(_1) ] | simple [ _val = _1 ];
Run Code Online (Sandbox Code Playgroud)
对于规则定义,但我收到一条我不明白的神秘编译器消息:
test\test.cpp `boost::spirit::_2' cannot appear in a constant-expression
Run Code Online (Sandbox Code Playgroud)
如果有人能阐明一些观点,我将不胜感激。
这是日志:
compiler: …Run Code Online (Sandbox Code Playgroud) 我想在一个字符串中搜索一个不等于"(",")","!","&","|",";"的位置.如果我使用if(str[1] != "!" && str[1] != "(" ...),它太长了...有什么我可以用来使这个简单吗?