Я пытаюсь выполнить какую-то «классы» в С.Создание своего рода класса в 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'
Кто-нибудь знает, что я сделал не так и как я могу это исправить?
Заранее спасибо.
Вашей функции 'new' содержит определение локального, образец, инициализируется после возвращения из функции. Независимо от того, что вы ожидаете от этого, он этого не делает. Обратите внимание на то, как ссылка отличается. –
Не могли бы вы проверить сайт для меня? Поскольку я почти скопировал код с «Complex.h» «Complex.c» «Complex_test.c» и рассказал мне, в чем разница и почему его код работает для него и моего, нет? – pepi55
См. Два ответа ниже, оба из которых указывают на отсутствие копирования. Если вы знакомы с C, вы должны понять, почему ваш код неправильный. Если вы этого не сделаете, вы должны научиться этому, прежде чем пытаться это делать. –