Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
6 / 5 / 6
Регистрация: 11.05.2013
Сообщений: 139
1

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

23.09.2013, 21:58. Просмотров 2867. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.09.2013, 21:58
Ответы с готовыми решениями:

Ошибка компиляции: static переменная уже определена
Подскажите в чём проблема ? SceneDataSet.h #ifndef SCENE_DATA_SET_H #define...

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

Уже определен в main.obj
main.cpp #include &lt;iostream&gt; #include &lt;ctime&gt; #include &quot;inventory.h&quot; using namespace std; ...

Функция уже определена в другом файле
Который день бьюсь и не могу найти ответа, подскажите, если знаете. Есть sparseMatrix.h: #pragma...

4
136 / 128 / 59
Регистрация: 13.12.2012
Сообщений: 293
23.09.2013, 22:26 2
Попробуйте сделать
C++
1
extern int StrError;
и затем определить ее в одном из файлов
0
6 / 5 / 6
Регистрация: 11.05.2013
Сообщений: 139
24.09.2013, 00:33  [ТС] 3
ViktorKozlov, неее, все это уже дааавно опробовал, ничего не помогает. Единственное, что могу отметить, если написать через static то компилируется нормально, НО... Потом если что-то в main присвоить переменной StrError, в ней как был ноль(ну или чем мы ее инициализировали), так и остается
0
Обитатель форума
200 / 183 / 54
Регистрация: 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
3284 / 2668 / 721
Регистрация: 25.03.2012
Сообщений: 9,624
Записей в блоге: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.09.2013, 03:48

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

"Переменная" уже определена в *.obj
menu_main #pragma once #include &quot;ec.h&quot; #pragma comment(lib, &quot;Ws2_32.lib&quot;) #pragma comment(lib,...

Локальная переменная уже определена в этой области
Доброго времени суток, почему если переменная объявлена в первой метке свича, то она будет доступна...

Локальная переменная или функция с именем "ran" уже определена в этой области
Заданы массивы А1(6), А2(7), А3(4), А4(6). Найти минимальное значение положительных чисел массива и...


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

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

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