1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
Скрыть объявление

Уважаемый Гость, в 23:30 по мск форум будет закрыт на профилактику на 1,5 часа до 01:00 24.10.2017

Ошибка Линкера

Тема в разделе "Общие вопросы по С и С++", создана пользователем DenisNN, 18 июл 2012.

  1. DenisNN

    DenisNN Гость

    Репутация:
    0
    Здравствуйте! Подскажите пожалуйста в чем здесь дело? Объявил extern указатели в файле .h, а использую в main.cpp, и компилятор постоянно выдает LINK ошибки.
    parser.h
    Код:
    /*
    parser.h
    vc_size - variables & constants buffer.
    
    token - external representation of token. Остается всегда в верху - не изменяется в функциях, изменяется по средствам временных указателей temp.
    prog  - main external program. 
    
    temp  - internal function point. Временных указателей в функциях который изменяет token. 
    tokenT - internal representation of token 
    
    */
    
    #pragma once
    
    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    #include <cstring>
    #include <conio.h>
    #include <cctype>
    
    using namespace std;
    
    ///// Is alpha token ////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////
    
    const int vc_size = 20;
    const int PROG_SIZE = 10000;
    
    
    
    enum tokenT {UNDEFTOK, NUMBER, OPERATOR}; // The internal representation of token
    
    extern char token[80];	// External representation.
    extern char *prog;		// External program.
    extern char *p_buff; 
    
    extern tokenT token_type; // Internal oken type
    
    class parser
    {
    
    public:
    ///// variables /////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////
    bool is_sp_tab(char*);  // Пробел или табуляция
    bool is_delimiter(char*); // Разделитель
    };
    
    tokenT get_token();
    parser.cpp
    Код:
    #include "parser.h"
    /*
    tokenT get_token()
    {
    register char *temp;
    
    token_type = UNDEFTOK;
    temp = token;
    
    if(*prog == '\0')
    *token = '\0';
    return(token_type = OPERATOR);
    
    
    }
    */
    
    ///// Пробел или табуляция //////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////
    
    bool parser::is_sp_tab(char *prg)	
    {
    if(*prg == ' ' || *prg == '\t')
    { cout << "Space" << endl;
    return true;
    }
    cout << "No space" << endl;
    return false;
    }
    main.cpp
    Код:
    #include "parser.h"
    
    int main()
    {
    parser ob;
    prog = new char[PROG_SIZE];
    
    cin >> prog;
    
    p_buff = prog;
    
    ob.is_sp_tab(p_buff);
    
    //get_token();
    
    return 0;
    }
     
  2. rrrFer

    rrrFer Гость

    Репутация:
    0
    extern используется для объявления (это не то же что определение)
    впишите ИЛИ в main.cpp ИЛИ в parser.cpp
    Код:
    char token[80];	// External representation.
    char *prog;		// External program.
    char *p_buff;
    и заработает.
    Хотя, я бы не советовал использовать extern, поддерживать такой код не приятно, возможны разные головные боли )
    Вообще в С++ есть тьма всяких штук, которые не стоит использовать (ну или хотя бы стоит стараться обходить стороной)
     
  3. DenisNN

    DenisNN Гость

    Репутация:
    0
    Спасибо!Все работает!)
     
  4. rrrFer

    rrrFer Гость

    Репутация:
    0
    Пожалсто, спрашивай еще :)
    По коду, у тебя еще память вытекает, походу. из под массива "prog"
     
  5. DenisNN

    DenisNN Гость

    Репутация:
    0
    Это как?
     
  6. rrrFer

    rrrFer Гость

    Репутация:
    0
    утечки в твоей программе. Если память выделяется new - то должна быть освобождена delete или delete[]
    а delete[] где? -МБ и есть, но мне не по глазам? )
     
  7. DenisNN

    DenisNN Гость

    Репутация:
    0
    Ааа!!! Понятно!! Ну забыл я, забыл!)))
     
Загрузка...

Поделиться этой страницей