В C++ существует только тонкое различие. Это - пережиток от C, в котором это имеет значение.
стандарт языка C ( C89 В§3.1.2.3, C99 В§6.2.3, и C11 В§6.2.3) передает под мандат отдельные пространства имен для различных категорий идентификаторов, включая [1 128] идентификаторы тега (для struct
/ union
/ enum
) и обычные идентификаторы (для typedef
и другие идентификаторы).
, Если Вы просто сказали:
struct Foo { ... };
Foo x;
Вы получили бы ошибку компилятора, потому что Foo
только определяется в пространстве имен тега.
необходимо было бы объявить это как:
struct Foo x;
Любое время Вы хотите обратиться к Foo
, необходимо было бы всегда называть его struct Foo
. Это становится раздражающим быстрый, таким образом, можно добавить typedef
:
struct Foo { ... };
typedef struct Foo Foo;
Теперь struct Foo
(в пространстве имен тега) и просто Foo
(в обычном пространстве имен идентификатора) и обратитесь к тому же самому, и можно свободно объявить объекты типа Foo
без struct
ключевое слово.
конструкция:
typedef struct Foo { ... } Foo;
просто сокращение для объявления и typedef
.
Наконец,
typedef struct { ... } Foo;
объявляет анонимную структуру и создает typedef
для него. Таким образом, с этой конструкцией, это не имеет имени в пространстве имен тега, только имени в пространстве имен определения типа. Это означает, что также не может быть вперед - объявлено. , Если Вы хотите сделать предописание, необходимо дать ему имя в пространстве имен .
тега
В C++, весь struct
/ union
/ enum
/ class
действие объявлений как, они неявно typedef
'редактор, пока имя не скрыто другим объявлением с тем же именем. См. ответ Michael Burr для полного изложения.
Вероятно, вам нужно настроить Sql Server, чтобы разрешить «удаленные» подключения:
Вы также можете попробовать: . \ Sql_server_instance_name
.\SQLExpress
Используйте localhost \ sql_server_instance_name
Например, localhost \ sqlexpress
Используйте . вместо 127.0.0.1
. \ sqlexpress