Проблема с настольным калькулятором. Язык программирования C ++ - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь реализовать калькулятор из языка программирования C ++, главы 10, 14 и 15.

У меня проблема с компоновщиком, когда я пытаюсь запустить его, я получаю эту ошибку:

неопределенная ссылка на `Lexer :: ts '

Я пробовал много вещей, чтобы избавиться от этого, но я не могу. Спасибо за помощь!

dc.h

namespace Lexer{
.
.
.
struct Token{..};
class Token_stream{...};
extern Token_stream ts;
}
.
. 

lexer.cpp
#include "dc.h"

Lexer::Token_stream ts{&cin};
.
.
.

parser.cpp
#include "dc.h"
using Lexer::ts;
double Parser::prim(bool get){
    if(get) ts.get();
.
.
.

main.cpp
#include "dc.h"
#include <sstream>

using std::string; using std::cout; using std::cin;
using Lexer::ts;


void Driver::calculate() {
    for (;;) {
        ts.get();
        if (ts.current().kind == Lexer::Kind::end) break;
        if (ts.current().kind == Lexer::Kind::print)continue;
        cout << Parser::expr(false) << '\n';
    }
}

int main(int argc, char* argv[]){
    Table::table["pi"]=3.14159265;
    Table::table["e"]=2.718281828;
    Driver::calculate();
    return Error::no_of_errors;
}

ОШИБКИ IM IMTING:

/ home / eduardo / Desktop / Utec / Poo2 / unidad-3-a-desk-calculator-Marcuss17 / main.cpp: 10: неопределенная ссылка на `Lexer :: ts '

/ home / eduardo / Desktop / Utec / Poo2 / unidad-3-a-desk-calculator-Marcuss17 / main.cpp: 11: неопределенная ссылка на`Lexer :: ts '

/ home / eduardo / Desktop / Utec / Poo2 / unidad-3-a-desk-calculator-Marcuss17 / main.cpp: 12: неопределенная ссылка на` Lexer :: ts'

CMakeFiles / DeskCalculator.dir / parser.cpp.o: в функции Parser::prim(bool)': /home/eduardo/Desktop/Utec/Poo2/unidad-3-a-desk-calculator-Marcuss17/parser.cpp:6: undefined reference to Lexer :: ts '

/ home / eduardo / Desktop / Utec / Poo2 / unidad-3-a-desk-calculator-Marcuss17 / parser.cpp: 8: неопределенная ссылка на `Lexer :: ts '

1 Ответ

0 голосов
/ 27 октября 2019
Lexer::Token_stream ts{&cin};

Это объявление переменной с именем ts, типа Lexer::Token_stream, в глобальном пространстве имен .

Вы забыли namespace Lexer { и } вокругэто в lexer.cpp.

...