LINUX.ORG.RU

error: unknown type name для структур

 


0

2

В variables.h, в котором собираюсь хранить глобальные типы и переменные объявляю структуры и создаю тестовый экземпляр. А он на меня того...

/*   VARIABLES
	Переменные и типы */

struct integer_variable
{
	char * key;
	int  value;
};

struct float_variable
{
	char * key;
	float value;
};

struct string_variable
{
	char * key;
	char * value;
};

integer_variable var_int; // 22-я строка
float_variable   var_flt; // 23-я строка
string_variable  var_str; // 24-я строка
...
variables.h:22:1: error: unknown type name ‘integer_variable’
variables.h:23:1: error: unknown type name ‘float_variable’
variables.h:24:1: error: unknown type name ‘string_variable’
...

fix

struct integer_variable var_int; // 22-я строка struct float_variable var_flt; // 23-я строка struct string_variable var_str; // 24-я строка

cdshines ★★★★★
()

или
struct integer_variable var_int;
или
typedef struct {...} float_variable;
кури мурзилку дальше

anonymous
()
Ответ на: fix от cdshines

Заработало, но меня интересует, почему этого не сказано в манах?

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

Даже поискал для тебя:

A struct declaration defines a type. The right brace that terminates the list of members may be followed by a list of variables, just as for any basic type. That is,

struct { ... } x, y, z;
is syntactically analogous to
int x, y, z;
in the sense that each statement declares x, y and z to be variables of the named type and causes space to be set aside for them. A structure declaration that is not followed by a list of variables reserves no storage; it merely describes a template or shape of a structure. If the declaration is tagged, however, the tag can be used later in definitions of instances of the structure. For example, given the declaration of point above,
struct point pt;
defines a variable pt which is a structure of type struct point.

cdshines ★★★★★
()
Ответ на: комментарий от cdshines

Написал. А по каким бумажным манам прикажете заниматься, если я объездил полгорода и все, что нашел по сям - это его книга за 400 р?

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

Я намекаю, что с и с++ - разные языки. Ты нашел книжку по плюсам, вот и учи плюсы, а то потом gcc не соберет твои шаблоны, а ты скажешь, что в манах не указано(

cdshines ★★★★★
()
Ответ на: комментарий от cdshines

Ты нашел книжку по плюсам, вот и учи плюсы

Не, не, не, лучше буду вот так мучиться, чем учить плюсы.

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

а не стоит читать книги авторов с русскими именами.

x0r ★★★★★
()
Ответ на: комментарий от invy

K&R же. А потом ознакомиться со стандартами на предмет различий.

кстати, а у gcc есть режим a-la k&r1? чтобы, значит, можно было типы аргументов только после прототипа функции писать и все такое. ;-)

а то что-то меня деятельность ansi стала утомлять, да и вообще — какой же русский не любит хардкор.

anonymous
()
Ответ на: комментарий от anonymous

без ключай отлично работает даже такое:

#include <stdio.h>

f(a)
{
	return a+1;
}

main()
{
	printf("f: %d\n", f(3));
	return 0;
}
указание типов переменных после прототипа тоже работает.

invy ★★★★★
()
Ответ на: комментарий от invy

без ключай отлично работает

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

а вообще, наверное, забавно было бы сделать возможным выбор default type. существенно бы упростило всякий domain-specific код, типа

#pragma default_type matrix

add(a,b){...}
dot(a,b){...}
transpose(a){...}
...
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.