2010-03-07 3 views
11

Это только первая часть моей домашней работы, я исправил все другие ошибки компиляции, но я продолжаю получать эту ошибку, пять.Попытка сделать это домашнее задание, но я продолжаю получать ошибку компиляции

1>\takehome\main.cpp(39) : error C2065: 'j' : undeclared identifier 
1>\takehome\main.cpp(44) : error C2065: 'j' : undeclared identifier 
\takehome\main.cpp(45) : error C2065: 'j' : undeclared identifier 
\takehome\main.cpp(76) : error C2065: 'j' : undeclared identifier 
\takehome\main.cpp(80) : error C2065: 'j' : undeclared identifier 

Я пробовал делать все с этим, но я, вероятно, что-то делаю неправильно ... очевидно, что я есть. Я мог бы использовать какую-то помощь, если вы не возражаете :). Кстати, на случай, если кто-то задается вопросом, делая simpletron.

#include <iostream> 
using namespace std; 

int main() 
{ 
int memory[100]; //Making it 100, since simpletron contains a 100 word mem. 

int operation; //taking the rest of these variables straight out of the book seeing as how they were italisized. 

int operand; 

int accum = 0; // the special register is starting at 0 

int position = 0; //making the starting position to be 0. 

for (int j = 0; j < 100; j++) //Simply stating that for int j is = to 0, j must be less than 100 because that is the memory limit, and for every pass-through, increment j. 

    memory[j] = 0; 


// This is for part a, it will take in positive variables in a sent-controlled loop and compute + print their sum. These are random variables. 
memory [0] = 2942; 

memory [1] = 2342; 

memory [2] = 3523; 

memory [3] = 2031; 

memory [4] = 5000; 

memory [5] = 8080; 

memory [6] = 3425; 

j = 0; //Makes the variable j start at 0. 

while (true) 
{ 

    memory[ j ]%100 = operand; // Finds the op codes from the limit on the memory (100) 
    memory[ j ]%100 = operation; 

    //using a switch loop to set up the loops for the cases 
    switch (operation){ 
    case 1: //reads a variable into a word from loc. 
    cout <<"\n Input a positive variable: "; 
    cin >> memory[ operand ]; break; 

    case 2: // takes a word from location 
    cout << "\n\nThe content at location " << operand << "is " << memory[operand]; break; 

    case 3:// loads 
    accum = memory[ operand ]; break; 

    case 4: //stores 
    memory[ operand ] = accum; break; 

    case 5: //adds 
    accum = accum + memory[ operand ]; break; 


    case 6: // subtracts 
    accum = accum - memory[ operand ]; break; 

    case 7: //divides 
    accum = accum/(memory[ operand ]); break; 

    case 8: // multiplies 
    accum = accum*memory [ operand ]; break; 

    case 9: // Branches to location 
    j = -1; break; 

    case 10: //branches if acc. is < 0 
    if (accum < 0) 
    j = 5; break; 

    case 11: //branches if acc = 0 
    if (accum == 0); break; 

    case 12: // Program ends 
    exit(0); break; 
} 
j++; 
} 
return 0; 
} 
+0

@pickypg Пожалуйста, не добавляйте тег домашней работы к вопросам, он в настоящее время внесен в черный список (прочитайте описание тега). – Tim

+0

@Tim Я отбросил изменение, которое следовало описанию тега, которое не было удалено, если вопрос не нуждается в очистке. Хотя, честно говоря, я все еще добавлял его к новым вопросам. – pickypg

+0

@Josh: Вы должны стремиться к тому, чтобы отступы были последовательными.Вы можете быть удивлены, сколько ошибок можно избежать путем правильного отступа просто потому, что вы видите ошибки, когда вы отступаете, например, переменные, объявленные в неправильной области, как это имеет место здесь. :) –

ответ

18

Объявление «j» вне цикла «для». Когда вы объявляете внутри заголовок цикла, он локален для блока цикла и не виден вне его.

3

Вы устанавливаете j = 0, не объявляя это как int j = 0.

Вы сделали это внутри цикла for но его локальная область длится только для тела цикла ..

11

Когда вы объявляете переменную внутри for заявление, что переменная только в области видимости тела цикл for, например

for (int j = 0; j < 100; j++) 
{ 
    // j is defined in here 
} 

// But j is undefined out here 
2

Если у вас есть что-то вроде

for (int i = 0; i < k; ++i) 
{ 
// stuff 
} 

i доступен только в рамках цикла for, так что если вы делаете что-то вроде этого:

for (int i = 0; i < k; ++i) 
{ 
// stuff 
} 
cout << i; 

Вы получаете подборку ошибка в cout << i;, потому что i больше не существует после завершения цикла for.

1

Переменная j является локальной для цикла for. Вам нужно увеличить его объем, делая что-то вроде этого:

int j; 
for(j = 0; j < 100; ++j) 

или переобъявить позже:

for(int j=0; j<100; ++j) 
... 
... 
int j = 0; 
while(true) 
... 
1

j существует только в течение цикла, то есть в инструкции

for (int j = 0; j < 100; j++) //Simply stating that for int j is = to 0, j must be less than 100 because that is the memory limit, and for every pass-through, increment j. 
    memory[j] = 0; 

Вы должны были написать

int j; 
for(j=0;j<100;j++) 
... 
2

В C++ область действия переменной, объявленной в цикле for, представляет собой цикл. Поэтому, когда вы говорите:

for (int j = 0; j < 100; j++) { 
    // j only exists here (and in the for statement itself) 
} 

Переменная j существует только в теле цикла.

Смежные вопросы