Это продолжение того, как создать указатель функции для добавления метода print
, Добавление указателя функции в структуру для печати. Скажем, я создал это следующим образом:
typedef struct Book {
char* title;
unsigned int year;
void (*print)(struct Book *book);
} Book;
void print(Book *book)
{
printf("{\n\ttitle: \"%s\",\n\tyear: %d\n}\n", book->title, book->year);
}
int main(int argc, char * argv[])
{
Book book = {
.title="Jaws",
.year=2000
};
print(&book); // this works
book.print(&book); // this seg faults
}
Как правильно сделать вызов book.print()
?
Book book
(или после его объявления) вам также необходимо инициализироватьbook.print
, если вы собираетесь его использовать. - person goodvibration   schedule 01.11.2020.print=print
к объявлению структуры? - person carl.hiass   schedule 01.11.2020print
в структуреBook
, чтобы (вас) не спутать его с функцией с именемprint
. - person goodvibration   schedule 01.11.2020book.print
, вот и все. Одной из особенностей языка c, которой нет, является привязка функций к структурам. - person Daniel Farrell   schedule 01.11.2020.print=print
происходит из-за того, что это на 100% нормально, нет конфликта пространств имен, поскольку имена элементов структуры и имена функций занимают разные пространства имен. (хотя это никак не решает путаницы, создаваемой человеческим мозгом при взгляде на него) - person David C. Rankin   schedule 01.11.2020