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

Проблема именно с видимостью функций другим файлам - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сортировка чисел в файле http://www.cyberforum.ru/cpp-beginners/thread1098343.html
В последовательном текстовом файле построчно занесены до 50 целых положительных чисел (каждое число <10000). Каждое новое число – в новой строке. Получить файл, в котором все числа исходного файла...
C++ Нахождение чётных и нечётн. чисел(с использованием динамических массивов) Попытался написать прогу но она не работает( #include <iostream> #include <conio.h> using namespace std; void eo(int n); void main(){ http://www.cyberforum.ru/cpp-beginners/thread1098317.html
C++ Массивы. Отсортировать 100 самых больших чисел в порядке убывания и добавить отсортированные числа в созданный 3 массив
Имеем 2 дввухмерных массива 10х10 с случайными часлами не выше 1000. Из этих 2-х массивов отсортировать 100 самых больших чисел в порядке убывания и добавить отсортированные числа в созданный 3-ий...
Неразрешенный внешний символ при Opendir ("D://") C++
Всем привет, имеется код в пару строчек, почему пишет ошибки ?? конкретно эму ненравится это dir = opendir("D://"); , но почему?? Ошибка 1 error LNK2019: ссылка на неразрешенный внешний...
C++ Оформление списка в виде структуры, исправить ошибку в коде http://www.cyberforum.ru/cpp-beginners/thread1098287.html
Здравствуйте, есть проблема, нужно оформить список в виде структуры, но вот есть ошибка в строке, не могу понять в чем, но при компиляции выдает ошибку в 13 строке. Помогите пожалуйста #include...
C++ Найти сумму элементов в тех столбцах матрицы, которые содержат хотя бы один отрицательный элемент Дана вещественная прямоугольная матрица A, размером nxm. Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент. #include <iostream> #include <stdio.h> ... подробнее

Показать сообщение отдельно
DrOffset
7141 / 4282 / 965
Регистрация: 30.01.2014
Сообщений: 7,084
18.02.2014, 01:27
Цитата Сообщение от metaluga145 Посмотреть сообщение
DrOffset, у него несколько раз подключается файл hll.h, отсюда скорее всего ошибка. как раз от этого и спасают гварды. ему надо просто избежать множественного подключение этого файла.
Так. Я просмотрел важный момент, но гварды его все равно не спасут.
В общем проблема не в заголовочном файле, а в том, что он инклудит cpp файлы!
Цитата Сообщение от snyppimylt Посмотреть сообщение
#include "100.cpp"
#include "strfnc.cpp"
Все, что я написал выше, тем не менее, остается правомерным. Только - это не случай ТС.
Спасибо, что вынудил еще раз глянуть на его код

Добавлено через 26 минут
Цитата Сообщение от snyppimylt Посмотреть сообщение
Я создал чисто тестовый пример проекта который создает след. ошибку со строчкой:
strfnc.obj : error LNK2005: "int __cdecl func(int)" (?func@@YAHH@Z) уже определен в testmain.obj
Итак, причина все та же, что описана в моем сообщении про includes (двойное включение содержимого файла подключенного через #include), а так же указанная проблема отсутствия include-guards. То есть проблемы две.

Конкретно к озвученной ошибке привели:
1. Подключение cpp файлов в testmain.cpp. В этом случае они не является единицами трансляции, а просто копируются в testmain.cpp; затем компиляция testmain.cpp, strfnc.cpp и 101.cpp. Получаем три объектных файла с пересекающимся содержимым.

Значит, исправленный код может выглядеть так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// hll.h
#ifndef HLL_H_INCLUDED
#define HLL_H_INCLUDED
//^ include-guards тем не менее следует добавить. Как советовали выше.
 
#include <windows.h>
#include <iostream>
#include <stdio.h>      /* printf */
#include <stdlib.h>     /* getenv */
#include <conio.h>
#include <string.h>
 
class test 
{
public:
    int a;
 
    void func()
    {
        a=1030;
        std::cout<<a;
    }
};
 
int func(int la);
 
#endif
Файл strfnc.cpp
C++
1
2
3
4
5
6
7
#include "hll.h"
 
int func(int la)
{
    la=2000;
    return la;
}
Файл testmain.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// testmain.cpp
 
#include "hll.h"
 
int main()
{
    test rt;
    rt.func();
    cout<<endl<<"100";
    int ad =func(1);
    cout<<endl<<ad;
    getch();
    return 0;
}
Можно для реализации метода класса func тоже добавить cpp файл по аналогии с strfnc.cpp.
Смысл исходного кода оставляю на твоей совести. Только поправил написанное.
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru