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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Mike_device
3 / 3 / 3
Регистрация: 11.05.2013
Сообщений: 139
#1

Переменная уже определена в Form_5.obj - C++

23.09.2013, 21:58. Просмотров 1436. Ответов 4
Метки нет (Все метки)

Здравствуйте, я наткнулся на следующую проблему и не могу решить. Вот имеется код файла Form_5.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef _FORM5_H
#define _FORM5_H
 
typedef struct {
    char *s;                // Указатель на строку
    unsigned max;           // Максимальное количество символов в строке, определяющееся при инициализации
    unsigned N;             // Динамическая (текущая) длина строки
} str;
 
const int noMemory = 1;
const int inpError = 2;
const int outError = 3;
 
/*Переменная ошибок*/
 int StrError = 0;  
 
#endif

Затем идет Form_5.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
#include "Form_5.h"
 
void InitStr(string1 *st, unsigned n) {
    *st = (string1)malloc(sizeof(char *) + 2 * sizeof(unsigned));
 
    if (!(*st)) {
        StrError = noMemory;
        return;
    }
 
    (*st) -> s = (char *)calloc(n + 1, sizeof(char));
 
    if (!(*st)) {
        StrError = noMemory;
        return;
    }
 
    (*st) -> max = n;
}

И в конце сам файл main.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
#include "Form_5.h"
 
int main() {
        string1 str;
    unsigned len, number, n;
 
    setlocale(LC_CTYPE, "");
 
    printf("Введите максимальную длину строки: ");
    scanf_s("%u", &n, sizeof(unsigned));
 
    InitStr(&str, n);
    return 0;
}
Вся проблема в том, что при компиляции выдается следующая ошибка: Ошибка 1 error LNK2005: "int StrError" (?StrError@@3HA) уже определен в Form_5.obj

Ошибка 2 error LNK1169: обнаружен многократно определенный символ - один или более

Кто подскажет, как это можно исправить?
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2013, 21:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переменная уже определена в Form_5.obj (C++):

Глобальная переменная определена в хидере. Компилятор ругается на то, что переменная переопределена несколько раз - C++
Исходники: /* main.cpp */ #include &quot;hider.h&quot; int main(void) { return 0; } /* foo.cpp */

Функция уже определена в другом файле - C++
Который день бьюсь и не могу найти ответа, подскажите, если знаете. Есть sparseMatrix.h: #pragma once #include &lt;vector&gt; #include...

int glob уже определен в main.obj - C++
Почему #ifndef не помогает? 1.h: #ifndef ONE_H #define ONE_H int glob; #endif

Подскажите как правильно подключать библиотеки и решения. (функции уже определены в *.obj) - C++
Вот тут взял самомопальный aes. Там есть 3 исходных кода. 3 - сама программа. 1 и 2 - библиотека и решение.

Сообщение об ошибке "функция-член уже определена" - C++
Вот код #include &lt;iostream&gt; using namespace std; class Matrix { private: int **Array; int nstr, nstl; public:

Ошибка - "Функция _main уже определена" - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; void check_weekday(string day) { if (day == &quot;Понедельник&quot; || day ==...

4
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
23.09.2013, 22:26 #2
Попробуйте сделать
C++
1
extern int StrError;
и затем определить ее в одном из файлов
0
Mike_device
3 / 3 / 3
Регистрация: 11.05.2013
Сообщений: 139
24.09.2013, 00:33  [ТС] #3
ViktorKozlov, неее, все это уже дааавно опробовал, ничего не помогает. Единственное, что могу отметить, если написать через static то компилируется нормально, НО... Потом если что-то в main присвоить переменной StrError, в ней как был ноль(ну или чем мы ее инициализировали), так и остается
0
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 543
24.09.2013, 03:04 #4
static вовсе запретит доступ из других единиц трансляции.
Сделайте ф-цию.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const int outError = 3;
 
/*Переменная ошибок*/
 int StrError = 0;  
 
int func(int arg)
{
    if (!StrError)
        StrError = arg;
 
    return StrError;
}
 
#endif
 
 
////
 
    if (!(*st)) {
        func(noMemory);
        return;
    }
0
Kuzia domovenok
1951 / 1804 / 140
Регистрация: 25.03.2012
Сообщений: 6,245
Записей в блоге: 1
24.09.2013, 03:48 #5
в h файлах нельзя определять переменные
можно только объявлять extern переменные.
Например
файл header.h
C++
1
2
extern int Error;
void InitStr();
файл first.cpp
C++
1
2
3
4
5
#include "header.h"
int Error;
void InitStr(){
 
}
файл second.cpp
C++
1
2
3
4
5
#include "header.h"
int main(){
  Error=0;
  InitStr();
}
0
24.09.2013, 03:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2013, 03:48
Привет! Вот еще темы с ответами:

Компиляция выдает ошибку "error LNK2005: _main уже определен в int.obj" - C++
Добрый день уважаемые. Столкнулся с данной проблемой. #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int...

как overload ++OBJ и --OBJ - C++
как overload ++OBJ и --OBJ

Текстовой файл с уже введенным текстом зашифровать и вывести уже зашифрованный - C++
Здравствуйте.Задание -шифр Виженера. Вроде код написал,но есть ошибки.Задание заключается в том,чтобы текстовой файл с уже введенным...

Переменная или переменная и условие - C++
Привет всем. Стало интересно. Есть предположим функция. В ней ссылкой передается аргумент Status; Как лучше сделать? ...


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

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

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