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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.94
Intel~lect
135 / 124 / 2
Регистрация: 03.07.2012
Сообщений: 355
#1

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

21.08.2012, 09:02. Просмотров 2370. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как сделать чтобы функция была видна из .cpp файла? (C++):

Как объявить переменную так, чтобы она была видна в .h файле? - C++
День всем добрый! Допустим, есть у меня код в главном .cpp файле: #include "Windows.h" #include "my.h" using namespace...

Экземпляр в хедере. Обьект в меин. Функция в cpp модифицирует поле обьекта. Как сделать? - C++
Как сделать что бы void modif() изменял значение поля hours для обьекта st2. Есть 3 файла: 1.h 2.cpp main.cpp 1.h class...

как сделать программно чтобы программа была постоянно на заднем плане - C++
Суть вопроса как сделать программно чтобы программа была постоянно на заднем плане? Пишу экранную клавиатуру, как делать имитацию...

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
-=ЮрА=-
Заблокирован
Автор 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 / 2
Регистрация: 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
秘密
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
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 / 2
Регистрация: 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
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
21.08.2012, 10:12 #12
Цитата Сообщение от alkagolik Посмотреть сообщение
#include <header.h>
Если файл лежит не в системных директориях, то подключать надо "header.h"
1
Intel~lect
135 / 124 / 2
Регистрация: 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 / 2
Регистрация: 03.07.2012
Сообщений: 355
21.08.2012, 10:48  [ТС] #15
alkagolik, Пожалуйста напиши где все эти опции найти. Где должно быть написано g++? Я в нем очень плохо разбираюсь.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2012, 10:48
Привет! Вот еще темы с ответами:

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

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

Как сделать, чтобы функция считала с точностью до - C++
Здравствуйте. Нужно написать программу. выполнил все пункты кроме одного. А именно, не знаю как сделать, чтобы функция считала с точностью...

Как сделать, чтобы функция возвращала массив? - C++
Доброго времени суток! Есть функция которая находит значения 4х элементов массива. как сделать чтобы она возвращала сразу весь массив?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.08.2012, 10:48
Закрытая тема Создать тему
Опции темы

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