我正在爲編譯器編寫解析器。所以對於構造我的代碼:C++構造函數錯誤
//constructor
Parser::Parser(char* file)
{
MyLex(file) ;
}
在使用編譯G ++ parsy.cpp parsydriver.cpp,不過,我得到這個錯誤說:
parsy.cpp: In constructor ‘Parser::Parser(char*)’:
parsy.cpp:13: error: no matching function for call to ‘Lex::Lex()’
lexy2.h:34: note: candidates are: Lex::Lex(char*)
lexy2.h:31: note: Lex::Lex(const Lex&)
parsy.cpp:15: error: no match for call to ‘(Lex) (char*&)’
我要去哪裏錯了? Lex myLex在Parser頭文件中聲明爲private。我不知道該怎麼做 。我嘗試使用這樣的:
//constructor
Parser::Parser(char* file):myLex(file)
{
}
我的詞法分析器構造是:
Lex::Lex(char* filename): ch(0)
{
//Set up the list of reserved words
reswords[begint] = "BEGIN";
reswords[programt] = "PROGRAM";
reswords[constt] = "CONST";
reswords[vart] = "VAR";
reswords[proceduret] = "PROCEDURE";
reswords[ift] = "IF";
reswords[whilet] = "WHILE";
reswords[thent] = "THEN";
reswords[elset] = "ELSE";
reswords[realt] = "REAL";
reswords[integert] = "INTEGER";
reswords[chart] = "CHAR";
reswords[arrayt] = "ARRAY";
reswords[endt] = "END";
//Open the file for reading
file.open(filename);
}
但是,這產生了以詞法分析器文件和功能一堆不確定的參考! 我已經正確地包含了這些文件。但到目前爲止,我不明白如何解決這個問題。
UPDATE 頭文件夾雜物:
parsy.h文件:
#ifndef PARSER_H
#define PARSER_H
// other library file includes
#include "lexy2.h"
class Parser
{
}...
parsy.cpp文件:
// usual ilbraries
#include "parsy.h"
using namespace std ;
Parser::Parser(char* file) ....
parsydriver.cpp:
// usual libraries
#include "parsy.h"
using namespace std ;
int main()
..
lexy2.cpp文件:
我已經包含了lexy2.h文件。我應該在詞法分析器中包含解析器頭文件嗎?看起來不太可能。但是我應該如何解決它們呢?
第二種方法是正確的方法。第一次工作時問題依然存在。他們是從你身上發芽的鏈接器錯誤,沒有以某種形式正確鏈接。 – chris 2013-02-26 04:34:26
如何克服鏈接器錯誤?我將編輯並更新我將頭文件包含在內的問題。 – thestralFeather7 2013-02-26 04:35:35
請選擇:http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix – chris 2013-02-26 04:37:18