2016-12-20 4 views
1

Здравствуйте, я работаю над приложением CLR на C++. После нескольких часов работы я решил, что перемещение классов в разные файлы будет лучше, чем положить все в один файл. Я создал новый файл заголовка и новый файл cpp, но я просто начинающий, поэтому я сделал что-то не так.класс в отдельном файле C++

это мой файл заголовок

#pragma once 

class Show { 
public: 
    void Show::show_all(int num, int id_master, int id_slave, int periferia, int data); 
}; 

мой каст файл (только простая функция печати)

#include "Show.h" 
#include <stdio.h> 

class Show{ 
private: 
    void show_all(int num, int id_master, int id_slave, int periferia, int data) { 

    printf("%d\n", num); 
    printf("id of mastra is: %d\n", id_master); 
    printf("id of slave is: %d\n", id_slave); 
    printf("id of device is: %d\n", periferia); 
    printf("in data part %d\n", data); 

    }; 
}; 

затем в основном я делаю что-то вроде этого

Show sh; 

и затем, когда я попробую назвать свою функцию следующим образом:

sh.vypis_vsetko(num, id_master, id_slave, periferia, data); 

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

  • «зр»: необъявленный идентификатор (всегда, когда я упоминаю его)
  • «Show»: необъявленный идентификатор
  • слева от '.show_all' должен иметь класс/struct/union
  • синтаксическая ошибка: отсутствует ';' перед идентификатором 'sh'

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

+3

Здесь очень много основных ошибок. Ознакомьтесь с учебным пособием о разделении заголовка и файла реализации. – AndyG

+0

Хорошо, код неправильный, хотя мне любопытно, почему вы хотите изменить модификатор доступа с 'public' на' private'? – George

ответ

4

Для начала, в файле заголовка объявления метода класса осуществляется без префикса имя класса с именем метода:

class Show { 
public: 

    void show_all(int num, int id_master, int id_slave, int periferia, int data); 
}; 

Наконец, определение метода класса в .cpp файле делается без класса декларации, вообще:

void Show::show_all(int num, int id_master, int id_slave, int periferia, int data) { 

    printf("%d\n", num); 

    // the rest of the code. 

Вы уже объявили класс, в файле заголовка в #include д.

+0

Полное объявление класса должно быть видимым из определения его функций, но не так, как OP писал это действительно. – Quentin

+0

Файл заголовка получает '# include'd, так что это должно быть хорошо. –

+0

Я попытался исправить свой код, но все равно получаю те же ошибки. –

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