2017-01-22 7 views
-4

Я продолжаю получать ошибки с RangeCheck, read, prntword. Ошибки:Неопределенная ссылка на функции в C++

undefined reference to RangeCheck(short, short, short) 

undefined reference to read(short*, bool) 

undefined reference to prntword(short) 

Я пытался изменить, где я поставил функции (выше основных, в основном), но я понятия не имею, что делать, чтобы исправить ошибку.

#include <stdio.h> 
#include <stdlib.h> 

#define READ 10 
#define WRITE 11 
#define LOAD 20 
#define STORE 21 
#define ADD 30 
#define SUBTRACT 31 
#define DIVIDE 32 
#define MULTIPLY 33 
#define BRANCH 40 
#define BRANCHNEG 41 
#define BRANCHZERO 42 
#define HALT 43 
#define CELLS 100 
#define RANGE 9999 
#define SENTINEL -1 

#define DEBUG 0 

short RangeCheck(short word, short min, short max); 
char* prntword(short word); 
bool read(short *data, bool check); 

int main() 
{ 

    bool error = false; 
    char *word, OperationCode, Operand; 
    short memory[CELLS], InstructionRegister; 
    int counter, Accumulator; 
    Accumulator = 0; 

    for (int i = 0; i < CELLS; i++) { 
     memory[i] = 0; 
    } 

    for (counter = 0; !error; counter++); { 
     counter = RangeCheck(counter, 0, CELLS - 1); 
     InstructionRegister = memory[counter]; 
     OperationCode = InstructionRegister/100; 
     Operand = InstructionRegister % 100; 
    } 

    switch(OperationCode) { 
     case READ: 
      read(&memory[Operand], false); 
      break; 
     case WRITE: 
      printf("%s\n", word = prntword(memory[Operand])); 
      break; 
     case LOAD: 
      Accumulator = memory[Operand]; 
      break; 
     case STORE: 
      memory[Operand] = RangeCheck(Accumulator, -RANGE, RANGE); 
      break; 
     case ADD: 
      Accumulator += memory[Operand]; 
      break; 
     case SUBTRACT: 
      Accumulator -= memory[Operand]; 
      break; 
     case DIVIDE: 
      Accumulator /= memory[Operand]; 
      break; 
     case MULTIPLY: 
      Accumulator *= memory[Operand]; 
      break; 
     case BRANCH: 
      break; 
    } 
} 
+3

Я вижу ваши ** функции декларации ** перед 'main ', но я не вижу никаких ** определений функций ** (т. Е. Они не определены). Подсказка: определение - это реализация функции. –

+0

Вы не определяете функции, которые вы вызываете. –

+0

Кстати, в зависимости от платформы было бы неплохо назвать одну из ваших функций 'read'. Это, в конце концов, системный вызов POSIX с таким именем. И если вы программируете на C++ (не в том, что в вашей программе есть какой-либо код на C++), то почему вы добавили тег C? Пожалуйста, не спам с тегами. –

ответ

0

Попробуйте заменить

short RangeCheck(short word, short min, short max); 
char* prntword(short word); 
bool read(short *data, bool check); 

с

short RangeCheck(short word, short min, short max){return 1;} 
char* prntword(short word){return 0;} 
bool read(short *data, bool check){return 0;} 

и он должен собрать для вас (однако он может не работать, как вы ожидаете)

1

Для использования собственные функции, которые вы должны объявить и определить их (само определение может удовлетворить оба).

no idea what to do to fix the error

Необходимо определить свою функцию (т. Е. Обеспечить ее реализацию).

Example:

#include <iostream> 

void foo(); // My function declaration 

int main() 
{ 
    foo(); // To use this function it must be declared and defined 

    return 0; 
} 

// The function definition 
void foo() 
{ 
    std::cout << "foo\n"; 
} 
0

Вы заявили и ссылаются эти 3 функции, но не определены. Вам необходимо обеспечить реализацию всех этих трех функций.