Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ compiling problem; class methods

I have started writing a very simple class, and all kinds of class methods seem to give me problems. I hope the problem is me and the solution is simple.

The command g++ -o main main.cpp gives the folowing output:

/usr/bin/ld: Undefined symbols:
Lexer::ConsoleWriteTokens()
collect2: ld returned 1 exit status

main.cpp:

#include<iostream>
#include"lexer.h"


int main(){

   Lexer lexhnd = Lexer();
    std::cout << "RAWR\n";
    lexhnd.ConsoleWriteTokens();
   std::cout << "\n\n";

return 0;
 }

lexer.h:

#ifndef __SCRIPTLEXER
#define __SCRIPTLEXER

#include <iostream>
#include <string>
#include <vector>

#define DEF_TOKEN_KEYWORD 0

struct token{
 int flag;
 std::string data;
};

class Lexer
{
public:
//  bool IsTrue();
//  bool AddLine(char * line);
    void ConsoleWriteTokens(void);

private:
std::vector<token> TOK_list;

};


#endif

lexer.cpp:

bool Lexer::IsTrue(){
return true;
};


 bool Lexer::AddLine(char * line){

token cool;
cool.data = line;

TOK_list.push_back(cool);
string = line;
return true;
};

void Lexer::ConsoleWriteTokens(void){

for (int i = 0; i < TOK_list.size(); i++){
    std::cout << "TOKEN! " << i;
}

return 0;
};

I am using g++ in xcode btw.

Thankyou very much in advance, I have been on this problem for a few hours.

EDIT:

g++ -o main lexer.h main.cpp
or
g++ -o main lexer.cpp main.cpp
or
g++ -o main main.cpp lexer.cpp

do NOT work either. -Hyperzap

like image 230
64bit_twitchyliquid Avatar asked May 06 '11 13:05

64bit_twitchyliquid


1 Answers

Your not compiling the lexer.cpp code.

Try

g++ -o main main.cpp lexer.cpp

as your compilation command.

PROBLEMS IN THE lexer.cpp

You probably want to include the lexer header in the lexer.cpp file

#include "lexer.h"

Also, you don't want to return an integer from void functions.

void Lexer::ConsoleWriteTokens(void){
  for (int i = 0; i < TOK_list.size(); i++){
    std::cout << "TOKEN! " << i;
  }
  //This function is void - it shouldn't return something
  //return 0;
};

Finally, you have some problems withs this function

bool Lexer::AddLine(char * line){

  token cool;
  cool.data = line;

  TOK_list.push_back(cool);
  //what is this next line trying to achieve?  
  //string = line;
  return true;
};

I'm not sure what you are trying to achieve with the line I commented out, it doesn't seem to do anything and string isn't defined (did you mean std::string mystring = line;)

Finally, don't forget to uncomment the functions declaired in lexer.h that you are defining in lexer.cpp.

like image 136
Tom Avatar answered Sep 27 '22 19:09

Tom