Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
powerglory
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 16
#1

Двусвязный список - Error C2011: ElementsList: переопределение типа "struct" - C++

03.08.2011, 13:43. Просмотров 795. Ответов 12
Метки нет (Все метки)

Что я сделал не правильно?

C++
1
2
3
4
5
6
typedef struct ElementsList
{
    struct ElementsList *Prev;
    struct ElementsList *Next;
    TiXmlElement *Cur;
} ElementsList;
Выдает ошибку:
1>c:\users\powerglory\documents\visual studio 2010\projects\wininet\spaces\getting.h(4): error C2011: ElementsList: переопределение типа "struct"
1> c:\users\powerglory\documents\visual studio 2010\projects\wininet\spaces\getting.h(4): см. объявление "ElementsList"

Среда: MSVC++2010
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.08.2011, 13:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двусвязный список - Error C2011: ElementsList: переопределение типа "struct" (C++):

Компилятор выдаёт ошибку: error C2011: Confection::Date: переопределение типа "struct". Как исправить? - C++
#pragma once #pragma warning #ifndef Confection_H #define Confection_H #include <string> #include "Filling.h" using namespace...

Ошибка "error C2011: переопределение типа" - C++
struct Tunit { public : int team; int team_agricultural; POINT location; POINT moveLocation; float max_helf; ...

C2011 переопределение типа "enum" RFMapTool c:\dxsdk\include\d3d8types.h - C++
Серьезность Код Описание Проект Файл Строка Состояние подавления Ошибка C2011 _D3DZBUFFERTYPE: переопределение типа...

Структура: error C2079: "A::myElem" использует неопределенный struct "A::B" - C++
class A { public: struct B; private: B myElem; }; struct A::B {

Двусвязный список с объектом трех типов: "целое число", "вещественное число", "строка" - C++
Есть проблема. Реализовать двухсвязный список. Каждый элемент списка может содержать один объект. Объект может быть трех типов: "целое...

Error: значение типа "const char" нельзя присвоить сущности типа "double" - C++
#include <iostream> #include <iomanip>// using namespace std; void main(void) { const int k=5; int a=10; unsigned int...

12
LosAngeles
Заблокирован
03.08.2011, 13:51 #2
C++
1
2
3
4
5
6
typedef struct
 {
 struct ElementsList *Prev;
 struct ElementsList *Next;
 TiXmlElement *Cur;
 } ElementsList;
0
powerglory
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 16
03.08.2011, 13:55  [ТС] #3
не помогает, то же самое
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
03.08.2011, 13:56 #4
где-то раньше объявлен такой тип.
0
powerglory
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 16
03.08.2011, 13:59  [ТС] #5
Цитата Сообщение от OstapBender Посмотреть сообщение
где-то раньше объявлен такой тип.
нет, не объявлен, я пробовал другие имена - то же самое
0
LosAngeles
Заблокирован
03.08.2011, 14:03 #6
ну может ты до этого определял структуру или ещё какую фигню после которой надо бы ; поставить но забыл?
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
03.08.2011, 14:04 #7
код всего проекта ...
0
powerglory
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 16
03.08.2011, 14:35  [ТС] #8
C++
1
2
3
4
5
//getting.cpp 
#include "stdafx.h"
 
 
#include "getting.h"

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// spaces.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
 
#include <windows.h>
#include <wininet.h>
#pragma comment(lib,"wininet")
 
#include <stdlib.h>
#include <fstream>
#include <iostream>
 
#include "getting.h"
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{}
C++
1
2
3
4
5
6
7
8
9
//getting.h
typedef struct ElementsList{
    int p; 
    TiXmlElement *Cur;
    struct ElementsList* Prev;
    struct ElementsList* Next;   
} ElementsList;
 
 extern ElementsList *ElCreate(TiXmlElement*);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//
 
#pragma once
 
#include "targetver.h"
 
#include <stdio.h>
#include <tchar.h>
 
 
 
// TODO: Установите здесь ссылки на дополнительные заголовки, требующиеся для программы
 
#include "tinyxml.h"
Добавлено через 1 минуту
Теперь выдает ошибки линковщика...
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.08.2011, 15:13 #9
Вот нафига на С++ писать в стиле Си? Зачем typedef? Зачем struct перед определением полей?

По делу на тебя ругается компилятор, ты структуру дважды (минимум) определяешь. #pragma once для кого придумано? Или #ifdef #endif хотя бы...
0
powerglory
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 16
03.08.2011, 15:30  [ТС] #10
Подскажите, пожалуйста как правильно подключить getting.cpp к проекту
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
03.08.2011, 15:36 #11
Двусвязный список - Error C2011: ElementsList: переопределение типа "struct"
там выберешь .cpp файл.

добавь в хедер инклюд гварды.
http://ru.wikipedia.org/wiki/Include_guard

 Комментарий модератора 
Прикрепляйте картинки к сообщениям.
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.08.2011, 15:47 #12
Во первых. В файле //getting.h в самом начале напиши #pragma once
Во вторых. Файл getting.срр подключается так же, как и все остальные.
0
Сыроежка
Заблокирован
03.08.2011, 20:00 #13
Чтобы было понятно, в чем проблема, то попробуйте написать код

C++
1
ElementsList s;
и компилятор запутается, не зная, то ли это имя структуры, то ли это имя , определенное с помощью typedef. Это на самом деле проблема только С++. В С такой проблемы нет, так как перед именем структуры в объявление переменной данного типа нужно указывать ключевое слово struct.

Поэтому если это у вас код С++, то надо сделать имя структуры и имя typedef различными. Например

C++
1
2
3
4
5
6
typedef struct tagElementsList
{
    tagElementsList *Prev;
    tagElementsList *Next;
    TiXmlElement *Cur;
} ElementsList;
и должно все компилироваться.

Либо у вас возникла витуация, что вы код С пытаетесь скомпилировать компилятором для проекта С++. В этом случае нужно заставить компилятор компилировать ваш модуль как С-модуль, и тогда ваш исходный код будет компилироваться без изменений.
0
03.08.2011, 20:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2011, 20:00
Привет! Вот еще темы с ответами:

Error C2678: бинарный "<<": не найден оператор, принимающий левый операнд типа "std::ifstream" - C++
Собственно, текст ошибки приведен в названии темы. Сам код: #include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iomanip&gt; #include...

Error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream" - C++
Вот ошибка 1&gt;------ Построение начато: проект: ыпошряоям, Конфигурация: Debug Win32 ------ 1&gt; файл.cpp 1&gt;c:\users\hp\desktop\уроки...

Исправить ошибку:error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream" - C++
Скажите пожалуйста, как исправить error C2678: бинарный &quot;&gt;&gt;&quot;: не найден оператор, принимающий левый операнд типа &quot;std::istream&quot; (или...

Error C2679: бинарный "<<": не найден оператор, принимающий правый операнд типа "std::string" (или приемлемое - C++
эмулятор работы банкомата Например #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;time.h&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru