2015-12-24 2 views
-7

Я хочу, чтобы класс управления, структура или что-то с новым файлом. Но когда я его создаю. Я не могу запустить свою программу. Это моя программа: main файл:Как создать файл, содержащий struct

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

    int main(int argc, char** argv) { 
     struct test var; 
     var.a = 2; 
     return (EXIT_SUCCESS); 
    } 

заголовочный файл структура:

#ifndef TESTING_H 
#define TESTING_H 

    struct test x; 

#endif /* TESTING_H * 

и последний файлов определяет структуру:

typedef struct test { 
    int a; 
}; 

У меня нет большого опыта в создании нового файл. Может быть, мой вопрос немой. Надеюсь, что все мне помогут. Благодаря!

+0

Просьба уточнить проблему. – Petr

+0

Сначала прочитайте страницу [Ask]. –

+1

@Petr, нет .cpp-файла. Посмотрите на код, это [tag: c]. –

ответ

1

Ваша проблема «Я предполагаю, что» структура Defintion

typedef struct test { 
    int a; 
}; 

Это не просто определение структуры, а определение типа и он отсутствует имя типа, это может быть исправлено, как это

typedef struct test { 
    int a; 
} MyTestStruct; 

или просто удалить typedef и просто использовать struct test объявить его экземпляры.

Кроме того, если вы намерены получить доступ к своим членам, вы должны предоставить определение в том же компиляционном блоке, где вы обращаетесь к его членам, в этом случае в файле «main», как вы его назвали.

Если вы хотите, чтобы скрыть элементы (сделать его непрозрачную структуру), попробуйте как этого

struct.h

#ifndef __STRUCT_H__ 
#define __STRUCT_H__ 
struct test; // Forward declaration 

struct test *struct_test_new(); 
int struct_test_get_a(const struct test *const test); 
void struct_test_set_a(struct test *test, int value); 
void struct_test_destroy(struct test *test); 

#endif /* __STRUCT_H__ */ 

И вы бы тогда

struct.c

#include "struct.h" 

// Define the structure now 
struct test { 
    int a; 
}; 

struct test * 
struct_test_new() 
{ 
    struct test *test; 
    test = malloc(sizeof(*test)); 
    if (test == NULL) 
     return NULL; 
    test->a = DEFAULT_A_VALUE; 
    return test; 
} 

int 
struct_test_get_a(const struct test *const test) 
{ 
    return test->a; 
} 

void 
struct_test_set_a(struct test *test, int value) 
{ 
    test->a = value; 
} 

void 
struct_test_destroy(struct test *test) 
{ 
    if (test == NULL) 
     return; 
    // Free all freeable members of `test' 
    free(test); 
} 

Этот метод на самом деле очень изящный и имеет много преимуществ, самое важное из того, что вы можете быть уверены, что структура используется правильно, так как никто не может устанавливать значения напрямую, и, следовательно, никто не может устанавливать недопустимые/неправильные значения. А также, если некоторые из его членов распределяются динамически с использованием malloc(), вы можете гарантировать, что они будут освобождены, когда пользователь называет _destroy() указателем. Вы можете контролировать диапазон значений, которые считаете подходящими, и избегать переполнения буфера в тех случаях, когда он применяется.

+0

Я могу сделать это только в заголовке файла, но я хочу использовать файл .c или .cpp для большего количества программ. Так как это сделать? Или не можете сделать он с struct? –

+0

Я не понимаю, если вы хотите скрыть участников от пользователя, вы можете создавать функции доступа, например 'int struct_test_get_a (const struct test * const test) {return test-> a;};' и вы можете иметь 'struct_test_set_a (struct test * test, int value) {test-> a = value;}', чтобы установить его, а затем использовать указатели на экземпляр структуры вместо экземпляров. –

+0

Может быть, моего уровня недостаточно для того, чтобы понять ваш код.В любом случае большое спасибо. Я буду пытаться на вашем уровне.: D –

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