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

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

Наш партнер Genesis Hackspace
  1. DenisNN

    DenisNN Гость

    Здравствуйте! Подскажите пожалуйста в чем здесь дело? Объявил extern указатели в файле .h, а использую в main.cpp, и компилятор постоянно выдает LINK ошибки.
    parser.h
    Код (C++):
    /*
    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
    Код (C++):
    #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
    Код (C++):
    #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 Well-Known Member
    C\C++ Team

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

    DenisNN Гость

    Спасибо!Все работает!)
     
  4. rrrFer

    rrrFer Well-Known Member
    C\C++ Team

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

    DenisNN Гость

    Это как?
     
  6. rrrFer

    rrrFer Well-Known Member
    C\C++ Team

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

    DenisNN Гость

    Ааа!!! Понятно!! Ну забыл я, забыл!)))
     
Загрузка...
Похожие Темы - Ошибка Линкера
  1. Rahmatov
    Ответов:
    0
    Просмотров:
    56
  2. M.Planck
    Ответов:
    5
    Просмотров:
    126
  3. Kotik222
    Ответов:
    4
    Просмотров:
    158
  4. Denybxx
    Ответов:
    5
    Просмотров:
    151
  5. heyyy
    Ответов:
    0
    Просмотров:
    193

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