桌面计算器的问题。 C++编程语言
Problem with a DeskTop Calculator. C++ Programming Language
我正在尝试根据 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;
}
我收到的错误:
/calculator-src/main.cpp:10: undefined reference to `Lexer::ts'
/calculator-src/main.cpp:11: undefined reference to `Lexer::ts'
/calculator-src/main.cpp:12: undefined reference to `Lexer::ts'
CMakeFiles/DeskCalculator.dir/parser.cpp.o: In function `Parser::prim(bool)':
/calculator-src/parser.cpp:6: undefined reference to `Lexer::ts'
/calculator-src/parser.cpp:8: undefined reference to `Lexer::ts'
Lexer::Token_stream ts{&cin};
这是全局命名空间.
中类型为Lexer::Token_stream
、的变量ts
的声明
您在 lexer.cpp
中忘记了 namespace Lexer {
和 }
。
我正在尝试根据 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;
}
我收到的错误:
/calculator-src/main.cpp:10: undefined reference to `Lexer::ts'
/calculator-src/main.cpp:11: undefined reference to `Lexer::ts'
/calculator-src/main.cpp:12: undefined reference to `Lexer::ts'
CMakeFiles/DeskCalculator.dir/parser.cpp.o: In function `Parser::prim(bool)':
/calculator-src/parser.cpp:6: undefined reference to `Lexer::ts'
/calculator-src/parser.cpp:8: undefined reference to `Lexer::ts'
Lexer::Token_stream ts{&cin};
这是全局命名空间.
中类型为Lexer::Token_stream
、的变量ts
的声明
您在 lexer.cpp
中忘记了 namespace Lexer {
和 }
。