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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Mike_device
 Аватар для Mike_device
3 / 3 / 3
Регистрация: 11.05.2013
Сообщений: 139
23.09.2013, 21:58     Переменная уже определена в Form_5.obj #1
Здравствуйте, я наткнулся на следующую проблему и не могу решить. Вот имеется код файла 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: обнаружен многократно определенный символ - один или более

Кто подскажет, как это можно исправить?
Спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
23.09.2013, 22:26     Переменная уже определена в Form_5.obj #2
Попробуйте сделать
C++
1
extern int StrError;
и затем определить ее в одном из файлов
Mike_device
 Аватар для Mike_device
3 / 3 / 3
Регистрация: 11.05.2013
Сообщений: 139
24.09.2013, 00:33  [ТС]     Переменная уже определена в Form_5.obj #3
ViktorKozlov, неее, все это уже дааавно опробовал, ничего не помогает. Единственное, что могу отметить, если написать через static то компилируется нормально, НО... Потом если что-то в main присвоить переменной StrError, в ней как был ноль(ну или чем мы ее инициализировали), так и остается
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 538
24.09.2013, 03:04     Переменная уже определена в Form_5.obj #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;
    }
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
24.09.2013, 03:48     Переменная уже определена в Form_5.obj #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();
}
Yandex
Объявления
24.09.2013, 03:48     Переменная уже определена в Form_5.obj
Ответ Создать тему
Опции темы

Текущее время: 02:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru