Usuário com melhor resposta
C++, Hello, world !"

Pergunta
-
Всем привет!
После многих-многих лет понадобился Cpp...
Забыл и то, что знал, и то, что не знал...
Простое дело -
main - в одном файле M.cpp,
вызываемая прога в другом файле - H.cpp
Оба файла видны в обозревателе решений,
в файлах исходного кода.
Транслирую, ругается -
C3861 H: идентификатор не найден
К чему бы это?
#include "stdafx.h" #include <iostream> #include <cstdio> int main() { H(); } #include "stdafx.h" #include <iostream> #include <cstdio> void H() { std::cout << "Hello, world !" << std::endl; }
Respostas
-
>А я с Cpp давным-давно не дружу...
Это не опровергает то, что я написал, а только подтверждает. Если не дружите, начните со схемы "все в одном файле", это будет проще. Либо сохраните ту структуру файлов, которая сейчас в той библиотеке. Когда получите минимально рабочее решение, можете уже думать о том, как разбивать на файлы.
>Куча сообщений об ошибках.
1. В .h файле не должно быть #include "stdafx.h". Предкомпилированные заголовки должны включаться в каждый cpp файл только один раз, и в самом начале файла. Либо можно их отключить, опять же, в простом проекте они только мешают.
2. В H.h нужно включить то, что я привел ранее
extern void H();
- Sugerido como Resposta Maksim MarinovMicrosoft contingent staff, Moderator segunda-feira, 8 de fevereiro de 2021 10:28
- Marcado como Resposta QazRdx segunda-feira, 8 de fevereiro de 2021 10:56
-
Все получилось.
Окончательный вариант.
Файл M.cpp -
#include "stdafx.h"
#include <iostream>
#include <cstdio>
#include "H.h"
int main () { H (); }
Файл H.cpp -
#include "stdafx.h"
#include <iostream>
#include <cstdio>
void H ()
{
std::cout << "Hello, world !" << std::endl;
}
Файл H.h -
extern void H();
Меня такой вариант пока устраивает.
Спасибо!
Todas as Respostas
-
-
К тому что на момент использования H не определен. Он будет определен только несколькими строками ниже.
Для решения проблемы следует либо добавить декларацию H до использования, либо использовать после определения путем перестановки строк.
This posting is provided "AS IS" with no warranties, and confers no rights.
-
В простейшем случае можно дописать перед использованием H:
extern void H();
Но в реальном проекте, конечно, нужно выделять объявления в заголовочные файлы и подключать их, а не дописывать поодиночке. Тут проблема не в порядке как таковом, а том, как организовать структуру проекта. В C# можно разделить проект на сколько угодно файлов, и они будут все "видеть" друг друга. В С++ же это не работает, нужно подключать объявления для всех внешних символов.
-
С extern - ом не надо,
надо, чтобы было как надо.
Файл M.cpp
#include "stdafx.h"
#include <iostream>
#include <cstdio>
#include "H.h" // Вставил заголовок
int main() { H (); }
Файл H.cpp
#include "stdafx.h"
#include <iostream>
#include <cstdio>
void H ()
{
std::cout << "Hello, world !" << std::endl;
}
Сообщение -
fatal error C1083: Не удается открыть файл включение: H.h: No such file or directory
Оба файла, M.cpp и H.cpp находятся в одной папке.
Что здесь не так?
- Editado QazRdx segunda-feira, 8 de fevereiro de 2021 07:22
-
Суть в том, что определенного "как надо" не существует. Как именно делить проект С++ на файлы, зависит от того, чего вы хотите добиться, а также от личных предпочтений. Можно сделать файл H.h, в дополнение к файлу H.cpp, с объявлением функции, и подключить его к M.cpp. Можно поместить само тело функции в H.h, сделав ее inline, и вовсе избавиться от файла H.cpp. Естественно, файл H.h надо физически создать, чтобы он был в проекте.
Если вы пишете простые программы, возможно вам все это и не нужно. Ничто не мешает напихать весь код в один файл, благо навигация в Visual C++ работает отлично.
-
Да, нет.
Пишу нечто "огромное" на C#,
но надо подключить библиотеку SOFA,
Standards Of Fundamental Astronomy,
- астрономические вычисления.
А эта библиотека на C в исходных кодах
достаточно большого объема,
причем для всех возможных платформ.
Из всей библиотеки нужно выбрать нужные модули
и как-то их подключить к моей проге.
Вот такая у меня "великая" миссия.
А я с Cpp давным-давно не дружу... -
-
>А я с Cpp давным-давно не дружу...
Это не опровергает то, что я написал, а только подтверждает. Если не дружите, начните со схемы "все в одном файле", это будет проще. Либо сохраните ту структуру файлов, которая сейчас в той библиотеке. Когда получите минимально рабочее решение, можете уже думать о том, как разбивать на файлы.
>Куча сообщений об ошибках.
1. В .h файле не должно быть #include "stdafx.h". Предкомпилированные заголовки должны включаться в каждый cpp файл только один раз, и в самом начале файла. Либо можно их отключить, опять же, в простом проекте они только мешают.
2. В H.h нужно включить то, что я привел ранее
extern void H();
- Sugerido como Resposta Maksim MarinovMicrosoft contingent staff, Moderator segunda-feira, 8 de fevereiro de 2021 10:28
- Marcado como Resposta QazRdx segunda-feira, 8 de fevereiro de 2021 10:56
-
Все получилось.
Окончательный вариант.
Файл M.cpp -
#include "stdafx.h"
#include <iostream>
#include <cstdio>
#include "H.h"
int main () { H (); }
Файл H.cpp -
#include "stdafx.h"
#include <iostream>
#include <cstdio>
void H ()
{
std::cout << "Hello, world !" << std::endl;
}
Файл H.h -
extern void H();
Меня такой вариант пока устраивает.
Спасибо!