Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.79/14: Рейтинг темы: голосов - 14, средняя оценка - 4.79
Intel~lect
135 / 124 / 14
Регистрация: 03.07.2012
Сообщений: 355
1

Как сделать чтобы функция была видна из .cpp файла?

21.08.2012, 09:02. Просмотров 2578. Ответов 51
Метки нет (Все метки)

У меня есть 3 файла: main.cpp, 1.h, 1.cpp. Все делаю по книге, но получается так, что определение функции не видно из main().cpp

main.cpp
C++
1
2
3
4
5
6
7
8
#include "1.h"
 
int main()
{
   func1();  // Ошибка. Undefined reference to 'func1(void)'
 
   return 0;
}
1.h
C++
1
void func1();  // прототип функции
1.cpp
C++
1
2
3
4
5
#include "1.h"
void func1()     // определение функции
{
   //...
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.08.2012, 09:02
Ответы с готовыми решениями:

Как объявить переменную так, чтобы она была видна в .h файле?
День всем добрый! Допустим, есть у меня код в главном .cpp файле: ...

Экземпляр в хедере. Обьект в меин. Функция в cpp модифицирует поле обьекта. Как сделать?
Как сделать что бы void modif() изменял значение поля hours для обьекта st2. ...

как сделать программно чтобы программа была постоянно на заднем плане
Суть вопроса как сделать программно чтобы программа была постоянно на заднем...

Как сделать так, чтобы программа не компилилась, хотя синтаксически была бы правильной?
Друзья! Дело в следующем, вот у меня есть функции X и Y. И вот мне не хотелось...

Программа работает только с одним разрешением экрана, как сделать чтобы она была универсальна
Написал простенький кликер на с++, который в игре нажимает кнопочки от 1 до 9,...

51
-=ЮрА=-
Заблокирован
Автор FAQ
21.08.2012, 09:17 2
Intel~lect, попробуй в твой хедер подключать стандартные инклуды либо писать через #ifndef #define #endif
main.cpp
C++
1
2
3
4
5
6
7
#include "header.h"
 
int main()
{
    func();
    return 0;
}
header.h
C++
1
2
3
#include <iostream>
using namespace std;
void func();

header.cpp
C++
1
2
3
4
5
#include "header.h"
void func()
{
    cout<<"func called\n";
}


Проект и отработка ниже
2
Миниатюры
Как сделать чтобы функция была видна из .cpp файла?  
Вложения
Тип файла: rar Intellect_VS6.0_proj.rar (5.0 Кб, 6 просмотров)
KostyaKulakov
Заблокирован
21.08.2012, 09:19 3
Хм у меня всё работает. проверь ты правильно расположил заголовочный фаил7
1
Изображения
 
KostyaKulakov
Заблокирован
21.08.2012, 09:20 4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Intel~lect, попробуй в твой хедер подключать стандартные инклуды либо писать через #ifndef #define #endif
main.cpp
C++
1
2
3
4
5
6
7
#include "header.h"
 
int main()
{
    func();
    return 0;
}
header.h
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
 
header.cpp
[CPP]#include "header.h"
 
void func()
{
    cout<<"func called\n";
}
void func();[/CPP]
Проект и отработка ниже
тут нету переопределения. те #ifndef #define #endif не нужны.
0
alkagolik
Заблокирован
21.08.2012, 09:24 5
main.cpp
C++
1
2
3
4
5
6
#include <header.h>
 
int main() {
    foo();
    return 0;
}
foo.cpp
C++
1
2
3
4
5
#include <header.h>
 
void foo() {
    std::cout << "I'm foo" << std::endl;
}
header.h
C++
1
2
3
4
5
6
7
#ifndef HEADER_H
#define HEADER_H
#endif
 
#include <iostream>
 
extern void foo();
1
Intel~lect
135 / 124 / 14
Регистрация: 03.07.2012
Сообщений: 355
21.08.2012, 09:25  [ТС] 6
-=ЮрА=-, KostyaKulakov Это у вас Visual Studio. А как правильно в CodeBlocks сделать?
0
-=ЮрА=-
Заблокирован
Автор FAQ
21.08.2012, 09:30 7
Цитата Сообщение от Intel~lect Посмотреть сообщение
-=ЮрА=-, KostyaKulakov Это у вас Visual Studio. А как правильно в CodeBlocks сделать?
- выставь в опциях линковщика настройки компилятора VisualStudio и открой проект через dsw файл рабочей области и на компиляцию...
2
defer
558 / 238 / 16
Регистрация: 29.11.2010
Сообщений: 800
21.08.2012, 09:33 8
Цитата Сообщение от alkagolik Посмотреть сообщение
extern void foo();
тут extern не нужен
Code-Blocks
2
-=ЮрА=-
21.08.2012, 09:36
  #9

Не по теме:

Intel~lect, вобщем если не выйдет напиши вечером, буду дома и нарежу скринами как откомпилировать в CodeBlocks в данный момент под рукой кроме 6-ки и 4-го BorlandC у меня ничего нет

2
Intel~lect
135 / 124 / 14
Регистрация: 03.07.2012
Сообщений: 355
21.08.2012, 10:09  [ТС] 10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Не по теме:
Intel~lect, вобщем если не выйдет напиши вечером, буду дома и нарежу скринами как откомпилировать в CodeBlocks в данный момент под рукой кроме 6-ки и 4-го BorlandC у меня ничего нет
Спасибо большое. Если ничего не получится то тогда напишу

Добавлено через 28 минут
Сейчас попробовал тоже самое в Visual Studio сделать и все получилось. А вот в CodeBlocks так ничего не выходит.
0
alkagolik
Заблокирован
21.08.2012, 10:11 11
Цитата Сообщение от Intel~lect Посмотреть сообщение
А вот в CodeBlocks так ничего не выходит
кто куда не выходит? что говорит?
0
Dekio
Фрилансер
Эксперт С++
5838 / 1219 / 499
Регистрация: 23.11.2010
Сообщений: 3,377
Записей в блоге: 1
21.08.2012, 10:12 12
Цитата Сообщение от alkagolik Посмотреть сообщение
#include <header.h>
Если файл лежит не в системных директориях, то подключать надо "header.h"
1
Intel~lect
135 / 124 / 14
Регистрация: 03.07.2012
Сообщений: 355
21.08.2012, 10:16  [ТС] 13
Цитата Сообщение от alkagolik Посмотреть сообщение
кто куда не выходит? что говорит?
Та же самая ошибка.
-2\main.cpp|9|undefined reference to `func1()'|
0
alkagolik
Заблокирован
21.08.2012, 10:21 14
Dekio, ага в браузере просто набирал.

Добавлено через 4 минуты
Intel~lect, а компилируешь ты наверное те же три файла из первого поста? посмотри в опциях компилятора в поле линкер что написано, должно быть g++.
0
Intel~lect
135 / 124 / 14
Регистрация: 03.07.2012
Сообщений: 355
21.08.2012, 10:48  [ТС] 15
alkagolik, Пожалуйста напиши где все эти опции найти. Где должно быть написано g++? Я в нем очень плохо разбираюсь.
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
21.08.2012, 11:06 16
ребята, я не пойму, что вы все про линкер беседуете, если ошибку компилятор выдает?
интел-лект, попробуй "спрятать" куда-нибудь файл 1.h (переименуй, например). изменится ли сообщение об ошибке?
если нет - замени
C++
1
#include "1.h"
на
C++
1
void func1();
и посмотри, станет ли все хорошо. доложи результат.
1
Intel~lect
135 / 124 / 14
Регистрация: 03.07.2012
Сообщений: 355
21.08.2012, 11:50  [ТС] 17
novi4ok, Я сначала переименовал 1.h в 11.h. Так получается две ошибки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <windows.h>
#include "1.h"              // \main\main.cpp|3|error: 1.h: No such file or directory|
using namespace std;
 
 
int main()
{
    func1();   \main\main.cpp|10|error: 'func1' was not declared in this scope|
 
    system("pause");
    return 0;
}
А когда строчку
C++
1
#include "1.h"
заменил на
C++
1
void func1();
, то осталась одна ошибка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <windows.h>
void func1();
using namespace std;
 
int main()
{
    func1();   // \main\main.cpp|9|undefined reference to `func1()'|
 
    system("pause");
    return 0;
}
0
novi4ok
551 / 504 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
21.08.2012, 11:57 18
Цитата Сообщение от Intel~lect Посмотреть сообщение
когда строчку
C++
1
#include "1.h"
заменил на
C++
1
void func1();
, то осталась одна ошибка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <windows.h>
void func1();
using namespace std;
 
int main()
{
    func1();   // \main\main.cpp|9|undefined reference to `func1()'|
 
    system("pause");
    return 0;
}
значит, ребята правы, и это у тебя - сообщение линкера. он почему-то не знает, где искать эту функцию. как ему об этом сообщить - без понятия. попробуй найти где-нибудь документацию, там - параметры этого линкера, как ему указать, что в сборку нужно включить модуль с этой ф-ей (1.obj обычно), или директорию указать, где ссылки разрешать, или ...
1
alkagolik
Заблокирован
21.08.2012, 18:46 19
1. settings->compiler and debugger->global compiler settings->toolchain executables
поле linker for dynamic libs должно содержать "g++"
2. Проект должен быть создан как проект с++
3. Все компилируемые файлы и все заголовочные файлы должны быть добавлены в проект
1
Миниатюры
Как сделать чтобы функция была видна из .cpp файла?  
Intel~lect
135 / 124 / 14
Регистрация: 03.07.2012
Сообщений: 355
21.08.2012, 19:34  [ТС] 20
alkagolik, Спасибо! Все таки получилось сделать эту программу.

Не по теме:

Целый день ушел на нее :D

0
21.08.2012, 19:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2012, 19:34

как сделать так чтобы была возможность записывать и фамилию и имя,а то у меня только до пробела читает?
здраствуйте!скажите пож-та как сделать так чтобы была возможность записывать и...

Как сделать так чтобы при каждом выделении памяти в методе была возможность ее очистить и вернуть результат?
Доброго времени суток! Есть код класса и хотелось бы устранить в нем следующие...

Как сделать так чтобы переменная в описании одной функции была доступна в описании другой?
Как сделать так чтобы переменная в описании одной функции была доступна в ...


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

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

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