2017-01-22 4 views
-4

Ich bekomme immer einen Fehler mit RangeCheck, read, prntword. Die Fehler sind:Undefinierter Verweis auf Funktionen in C++

undefined reference to RangeCheck(short, short, short) 

undefined reference to read(short*, bool) 

undefined reference to prntword(short) 

Ich habe versucht, wo ich die Funktionen gelegt zu ändern (über Haupt, in main), aber ich habe keine Ahnung, was den Fehler zu tun, um zu beheben.

#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

Ich sehe Ihre ** Funktionsdeklarationen ** vor 'Haupt', aber ich sehe keine ** Funktionsdefinitionen ** (d. H. Sie sind nicht definiert). Hinweis: In der Definition existiert die Implementierung der Funktion. –

+0

Sie definieren die Funktionen, die Sie anrufen, nicht. –

+0

Übrigens könnte es je nach Plattform eine schlechte Idee sein, eine Ihrer Funktionen 'read' aufzurufen. Es ist schließlich ein POSIX-Systemaufruf mit genau diesem Namen. Und wenn Sie in C++ programmieren (nicht dass es C++ - spezifischen Code in Ihrem Programm gibt), warum haben Sie dann das C-Tag hinzugefügt? Bitte spam nicht mit Tags. –

Antwort

0

Try

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

mit

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

und es sollte für Sie ersetzen kompilieren

1

zu verwenden (aber es kann nicht wie erwartet funktionieren) Ihre Um eigene Funktionen müssen Sie deklarieren und definieren (eine Definition allein kann beides erfüllen).

Sie müssen Ihre Funktion definieren (d. H. Ihre Implementierung bereitstellen).

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

Sie haben erklärt, und diese drei Funktionen verwiesen, aber nicht definiert. Sie müssen die Implementierung all dieser 3 Funktionen bereitstellen.

Verwandte Themen