2014-01-08 2 views
0

Я пытаюсь выполнить какую-то «классы» в С.Создание своего рода класса в C

Мой код в настоящее время состоит из этих 3 файлов:

  • SampleClass.c
  • SampleHeader.h
  • test.c

SampleHeader.h:

#ifndef SAMPLE_CLASS_H 
#define SAMPLE_CLASS_H 

struct Sample { 
    int i, j; 
}; 

extern const struct SampleClass { 
    struct Sample (*new)(int i, int j); 
} Sample; 

#endif 

SampleClass.c:

#include <stdio.h> 

#include "SampleHeader.h" 

static struct Sample new (int i, int j) { 
    return (struct Sample) { 
     .i = i, .j = j 
    }; 

    const struct SampleClass Sample = { 
     .new = &new 
    }; 
} 

test.c:

#include <stdio.h> 

#include "SampleHeader.h" 

int main (void) { 
    struct Sample classInC = Sample.new(3, -4); 

    return 0; 
} 

Бесстыдно вырванные из [УДАЛЕНО].

Проблема заключается в том, что во время компиляции (gcc -o app test.c SampleClass.c) он терпит неудачу с:

In function 'main': 
undefined reference to 'Sample' 

Кто-нибудь знает, что я сделал не так и как я могу это исправить?

Заранее спасибо.

+2

Вашей функции 'new' содержит определение локального, образец, инициализируется после возвращения из функции. Независимо от того, что вы ожидаете от этого, он этого не делает. Обратите внимание на то, как ссылка отличается. –

+0

Не могли бы вы проверить сайт для меня? Поскольку я почти скопировал код с «Complex.h» «Complex.c» «Complex_test.c» и рассказал мне, в чем разница и почему его код работает для него и моего, нет? – pepi55

+0

См. Два ответа ниже, оба из которых указывают на отсутствие копирования. Если вы знакомы с C, вы должны понять, почему ваш код неправильный. Если вы этого не сделаете, вы должны научиться этому, прежде чем пытаться это делать. –

ответ

2

Вы не следовать шаблону из вашей ссылки.

static struct Sample new (int i, int j) { 
    return (struct Sample) { 
     .i = i, .j = j 
    }; 

    const struct SampleClass Sample = { 
     .new = &new 
    }; 
} 

должен быть

static struct Sample new (int i, int j) { 
    return (struct Sample) { 
     .i = i, .j = j 
    }; 
} 

const struct SampleClass Sample = { 
    .new = &new 
}; 
+0

Спасибо за ответ! Я действительно глуп, потому что не замечаю этого ... Я чувствую, что потерял время. – pepi55

0

Ваш SampleClass.c должен, вероятно, содержат:

static struct Sample new (int i, int j) { 
    return (struct Sample) { 
     .i = i, .j = j 
    }; 
} 

const struct SampleClass Sample = { 
    .new = &new 
}; 
+0

Ты очень помог мне ответить. Я вижу свою ошибку, и мне интересно, почему я сам ее не заметил. – pepi55

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