2016-09-09 12 views
1

Im в настоящее время получаю ошибку:ожидается первичное выражение, прежде чем «» Маркер

kernel.c++:76:21: error: expected primary-expression before ',' token 
    Task task1(&gdt , taskA); 
        ^
kernel.c++:77:21: error: expected primary-expression before ',' token 
    Task task2(&gdt , taskB); 

Не знаю, почему это происходит, вот код моего kernel.C++ упрощена:

void taskA(); 
void taskB(); 

extern "C" void kernelMain 
     (
      /*arguments...*/ 
     ) 


{ 
     gdt gt; 

     TaskManager taskManager; 
     Task task1(&gdt , taskA); 
     Task task2(&gdt , taskB); 
     taskManager.AddTask(&task1); 
     taskManager.AddTask(&task2); 
} 

void taskA() 
{ 
    while(true) 
     printf("A"); 
} 


void taskB() 
{ 
    while(true) 
     printf("B"); 
} 

Если вы хотите, чтобы увидеть мой реальный код ядра: https://github.com/amanuel2/OS_Mirror/blob/master/kernel.c%2B%2B .. Любая помощь

Здесь упрощена мой task.h:

class Task 
{ 
      friend class TaskManager; 
       private: 
        uint8_t stack[4096]; // 4 KiB 
        CPUState* cpustate; 
       public: 


       Task(gdt *GlobalDescriptorTable, void entrypoint()); 
       ~Task(); 
    }; 


    class TaskManager 
    { 
      private: 
       Task* tasks[256]; 
       uint32_t num_task; 
       uint32_t current_task; 
      public: 
       TaskManager(); 
       ~TaskManager(); 
       bool AddTask(Task* task); 
       CPUState* Schedule(CPUState* cpustate); 
    }; 

Если вы хотите, чтобы увидеть весь код task.h здесь это: https://github.com/amanuel2/OS_Mirror/blob/master/task.h ..

и, наконец, свести к минимуму task.C++:

Task::Task(gdt *GlobalDescriptorTable, void entrypoint()) 
{ 
/*Stuff Happenes Here.. But i Minimized it*/ 
} 

Если вы хотите, чтобы увидеть фактический task.C++ вот он: https://github.com/amanuel2/OS_Mirror/blob/master/task.c%2B%2B .. Я не понимаю, почему я получаю эту ошибку. Любая помощь была бы весьма признательна.

+2

Не является ли 'gdt' типом? Я думаю, что вы хотите '& gt', когда вы создаете 'task1' и' task2' или это опечатка? –

+0

предлагают использовать разные имена для типов, чем для переменных –

+0

Да, извините @ ТимотиМарфи .. моя ошибка. Его решение сейчас. Спасибо, я должен удалить этот вопрос? – amanuel2

ответ

3

Ваша ошибка, вероятно, в этих двух строках:

Task task1(&gdt , taskA); 
Task task2(&gdt , taskB); 

Это должно быть

Task task1(&gt , taskA); 
Task task2(&gt , taskB); 

Вы должны изменить имена типов и имена переменных, поэтому они не похожи друг на друга, что многое так чтобы избежать подобных ошибок.