Возникли ошибки при сборке c

Посмотрев ваш проект, сообщаю: вы компилируете файлы Unit.cpp и Source.cpp. И все бы ничего, на вы же ухитрились в Unit.cpp внести строку

#include "Source.cpp"

так что все функции и иже с ними, имеющиеся в Source.cpp, скомпилированы дважды! Уберите эту строку.

И как только вы сделаете это и добавите отсутствующие у вас реализации Employee::Print() и Housewives::Print(), все соберется. Заработает ли — это уже совсем второй вопрос, я не смотрел сам код, только сборку…

Привет всем!

Сегодня решил попрактиковаться в написании программ с использованием библиотеки OpenCV версии 2.4.13.

Скачал, установил по инструкции, вошел в MSVS 2013, создал пустой проект на С++. В свойствах проекта поставил пути к папкам либов, пути к инклюд папкам (ко всем), сами либы в настройках компоновщика (во вкладке ввод),
и даже пути к папкам модулей OpenCV (тоже ко всем). Вбил вот этот код:

#include <opencv2/opencv.hpp>
int main(int argc, char** argv)
{
	// задаём высоту и ширину картинки
	int height = 620;
	int width = 440;
	// задаём точку для вывода текста
	CvPoint pt = cvPoint(height / 4, width / 2);
	// Создаёи 8-битную, 3-канальную картинку
	IplImage* hw = cvCreateImage(cvSize(height, width), 8, 3);
	// заливаем картинку чёрным цветом
	cvSet(hw, cvScalar(0, 0, 0));
	// инициализация шрифта
	CvFont font;
	cvInitFont(&font, CV_FONT_HERSHEY_COMPLEX, 1.0, 1.0, 0, 1, CV_AA);
	// используя шрифт выводим на картинку текст
	cvPutText(hw, "OpenCV Step By Step", pt, &font, CV_RGB(150, 0, 150));

	// создаём окошко
	cvNamedWindow("Hello World", 0);
	// показываем картинку в созданном окне
	cvShowImage("Hello World", hw);
	// ждём нажатия клавиши
	cvWaitKey(0);

	// освобождаем ресурсы
	cvReleaseImage(&hw);
	cvDestroyWindow("Hello World");
	return 0;
}

Жмякаю Отладка-Запуск без отладки- пишет следующий проект устарел: название проекта. Выполнить его сборку? Жму Да. Выдает: возникли ошибки сборки. продолжить и запустить последний успешно построенный вариант? Жму нет. Да не жму, т.к.
я недавно скомпилировал кривой код, который к сожалению не могу восстановить, он скомпилировался без ошибок, и теперь когда жму Да, открывается кривая консолька, с непонятными ошибками.

Собственно, когда нажал Нет, пишет кучу ошибок, а именно:

Ошибка 1
error LNK2019: ссылка на неразрешенный внешний символ _cvCreateImage в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 2
error LNK2019: ссылка на неразрешенный внешний символ _cvReleaseImage в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 3
error LNK2019: ссылка на неразрешенный внешний символ _cvSet в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 4
error LNK2019: ссылка на неразрешенный внешний символ _cvInitFont в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 5
error LNK2019: ссылка на неразрешенный внешний символ _cvPutText в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 6
error LNK2019: ссылка на неразрешенный внешний символ _cvNamedWindow в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 7
error LNK2019: ссылка на неразрешенный внешний символ _cvShowImage в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 8
error LNK2019: ссылка на неразрешенный внешний символ _cvDestroyWindow в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 9
error LNK2019: ссылка на неразрешенный внешний символ _cvWaitKey в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 10
error LNK1120: неразрешенных внешних элементов: 9
c:usersdaniildocumentsvisual studio 2013ProjectsTestARDebugTestAR.exe
TestAR

Вот такие вот дела. Надеюсь, поможете.

Заранее спасибо.

P.S. код скопипастил с сайта с инструкцией.

Я понимаю, что это может показаться бредом, но я у меня глаз начинает дергаться уже. На всех сайтах пишут давайте мол сделаем первый проект и бла бла бла, я установил себе visual studio 2019, создаю проект, копирую текст кода

C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <cstdlib> // для system
using namespace std;
 
int main()
{
    cout << "Hello, world!" << endl;
    system("pause"); // Только для тех, у кого MS Visual Studio
    return 0;
}

и у меня вываливается куча ошибок.
Первым выскакивает окно — Возникли ошибки сборки… Продолжить и запустить последний успешно построенный вариант?

Жму Да

Не удается запустить программу (путь к экзешнику)

Не удается найти указанный файл

Жму ОК
И внизу под кодом 17 ошибок, которые ругаются на код…

Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка C2018 неизвестный знак «0x7» Project4 C:Program Files (x86)Windows Kits10Include10.0.17763.0ucrtstddef.h 1
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка C2018 неизвестный знак «0x1b» Project4 C:Program Files (x86)Windows Kits10Include10.0.17763.0ucrtstddef.h 1
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка C2146 синтаксическая ошибка: отсутствие «;» перед идентификатором «щюь» Project4 C:Program Files (x86)Windows Kits10Include10.0.17763.0ucrtstddef.h 1

Это я некоторые скопировал.

Я пробовал в VSCode попробовать, но там тоже ничего не запускается…. Проблема с файло JSON. МОжет какие-то предварительные настройки нужно сделать?

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

I recently updated from Visual Studio 2017 Community Edition to Visual Studio 2019 Community Edition.

Now, if I build my solution with errors, they will show up in the build output, but not all of them will appear in the error list. It would appear only errors of open files will show up in the error list. This is incredibly annoying.

I am not alone in this issue. It has been reported many times on Microsoft’s forums, but no one has a definitive solution.

I have tried a variety of solutions people suggested in those threads:

  • I have ensured the filters are legitimate: Entire Solution, Errors enabled, Build + Intellisense.
  • I have tried deleting the .vs folder and restarting Visual Studio.
  • I just updated to the very latest Visual Studio 2019 version. Supposedly there are many different versions of this error, happening in versions of Visual Studio all the way back to 2017. Some supposedly have been fixed…?
  • I have disabled parallel project loading.

I have experienced this before in other versions of Visual Studio with Razor pages. To my knowledge, that’s to be expected in Razor though.

The only other factor that I severely doubt impacts anything is that it’s a Visual Studio project generated by Unity editor. From what I’ve read, ASP.NET, Razor, Xamarin, and other frameworks have each had their own version of issue reported. Perhaps Unity is afflicted by it too, but I don’t see how or why. I doubt Unity’s auto-generated Visual Studio projects are that different from your standard library projects.

I recently updated from Visual Studio 2017 Community Edition to Visual Studio 2019 Community Edition.

Now, if I build my solution with errors, they will show up in the build output, but not all of them will appear in the error list. It would appear only errors of open files will show up in the error list. This is incredibly annoying.

I am not alone in this issue. It has been reported many times on Microsoft’s forums, but no one has a definitive solution.

I have tried a variety of solutions people suggested in those threads:

  • I have ensured the filters are legitimate: Entire Solution, Errors enabled, Build + Intellisense.
  • I have tried deleting the .vs folder and restarting Visual Studio.
  • I just updated to the very latest Visual Studio 2019 version. Supposedly there are many different versions of this error, happening in versions of Visual Studio all the way back to 2017. Some supposedly have been fixed…?
  • I have disabled parallel project loading.

I have experienced this before in other versions of Visual Studio with Razor pages. To my knowledge, that’s to be expected in Razor though.

The only other factor that I severely doubt impacts anything is that it’s a Visual Studio project generated by Unity editor. From what I’ve read, ASP.NET, Razor, Xamarin, and other frameworks have each had their own version of issue reported. Perhaps Unity is afflicted by it too, but I don’t see how or why. I doubt Unity’s auto-generated Visual Studio projects are that different from your standard library projects.

изображение ошибки сборкиЯ установил Visual Studio Community 2017 и выбрал Разработка для рабочего стола в C ++. Все установлено.

Я создал новый проект, как Файл -> Новый -> Visual C ++ -> Пустой проект.

После запуска программы, нажав Локальный отладчик Windows, Я получаю следующую ошибку.

Ошибка сборки:
ошибка сборки

Полная ошибка:
полная ошибка

Я также проверил предыдущие вопросы, но не смог найти решение.

Примечание. Я не получаю консольное приложение Win32 (Файл -> Создать -> Проект -> Visual C ++ -> Консольное приложение Win32). Я получаю только консольное приложение Windows. Даже в этом также я получаю ошибку сборки.

-1

Решение

-1073741515 означает: «Приложению не удалось правильно инициализироваться (0xc0000135)» Поскольку вы не зависите от CLR, щелкните правой кнопкой мыши имя проекта и отключите поддержку общеязыковой среды выполнения в свойствах проекта.

введите описание изображения здесь

0

Другие решения

Вместо выбора Пустой проект для ваших первых экспериментов с VS2017 выберите один из типов проектов, который даст вам рабочий скелет. Если вы хотите попробовать консольное приложение C ++, тип проекта будет Консольное приложение Windows. Это даст вам готовое приложение с Main() функция, которая просто имеет return 0; утверждение в нем.

Ударь F11 ключ или выберите отлаживать/Шаг в из меню, чтобы скомпилировать ваш проект и перейти в Main(), Он остановится на открывающейся фигурной скобке. Удар F11 снова, и это будет шаг к return 0; заявление. Удар F5 сейчас он продолжит работу и выйдет из программы. Теперь вы убедились, что можете успешно создавать, запускать и отлаживать свой код.

Как только вы убедились, что это работает, вы можете начать добавлять код и отлаживать его. Пустой проект предназначен для тех случаев, когда вы действительно знаете, что делаете, и хотите начать с нуля, в противном случае один из предопределенных проектов — гораздо более простой способ начать работу.

1

Добавлено 27 марта 2021 в 12:55

В этом разделе мы рассмотрим некоторые из распространенных проблем, с которыми, похоже, начинающие программисты сталкиваются с довольно высокой вероятностью. Это не исчерпывающий список проблем компиляции или запуска программ, а скорее прагматичный список решений самых основных проблем. Если у вас есть предложения по другим вопросам, которые могут быть добавлены в этот список, опубликуйте их в разделе комментариев ниже.

Общие проблемы во время выполнения

Вопрос: При выполнении программы окно консоли мигает, а затем сразу закрывается.


Сначала добавьте или убедитесь, что следующие строки находятся в верхней части вашей программы (пользователи Visual Studio должны убедиться, что эти строки появляются после #include "pch.h" или #include "stdafx.h", если таковые существуют):

#include <iostream>
#include <limits>

Во-вторых, добавьте следующий код в конец функции main() (прямо перед оператором return):

// сбрасываем все флаги ошибок
std::cin.clear();
// игнорируем любые символы во входном буфере, пока не найдем новую строку
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n');
// получаем от пользователя еще один символ
std::cin.get();

Это заставит вашу программу ждать, пока пользователь нажмет любую клавишу, прежде чем продолжить, что даст вам время изучить вывод вашей программы, прежде чем ваша операционная система закроет окно консоли.

Другие решения, такие как обычно предлагаемое system("pause"), могут работать только в определенных операционных системах, и их следует избегать.

Более старые версии Visual Studio могут не приостанавливаться, когда программа запускается в режиме Начать с отладкой (Start With Debugging) (F5). Попробуйте запустить в режиме Начать без отладки (Start Without Debugging) (Ctrl + F5).

Вопрос: Я запустил свою программу, получил окно, но ничего не выводится.


Выполнение может блокировать ваш антивирус. Попробуйте временно отключить его и посмотрите, не в этом ли проблема.

Вопрос: Моя программа компилируется, но работает некорректно. Что не так?


Отладьте ее! Советы по диагностике и отладке программ приведены далее в главе 3.

Общие проблемы времени компиляции

Вопрос: Когда я компилирую свою программу, я получаю ошибку о неразрешенном внешнем символе _main или _WinMain@16


Это означает, что ваш компилятор не может найти вашу функцию main(). А все программы должны включать в себя эту функцию.

Есть несколько вещей, которые нужно проверить:

  1. Содержит ли ваш код функцию с именем main?
  2. Правильно ли написано имя main?
  3. Когда вы компилируете свою программу, видите ли вы, что файл, содержащий функцию main(), компилируется? Если нет, либо переместите функцию main() в другой файл, либо добавьте этот файл в свой проект (для получения дополнительной информации о том, как это сделать, смотрите урок «2.7 – Программы с несколькими файлами кода»).
  4. Вы точно создали консольный проект? Попробуйте создать новый консольный проект.

Вопрос: Я пытаюсь использовать функциональность C++11/14/17/XX, но она не работает.


Если у вас старый компилятор, он может не поддерживать эти более свежие дополнения к языку. В этом случае обновите свой компилятор.

В случае с современными IDE/компиляторами ваш компилятор может по умолчанию использовать более старый стандарт языка. Мы рассмотрим, как изменить стандарт языка в уроке «0.12 – Настройка компилятора: выбор стандарта языка».

Вопрос: При попытке использовать cin, cout или endl компилятор говорит, что cin, cout или endl являются «необъявленными идентификаторами».


Во-первых, убедитесь, что вы включили следующую строку в верхней части файла:

#include <iostream>

Во-вторых, убедитесь, что каждое использование cin, cout и endl имеет префикс «std::«. Например:

std::cout << "Hello world!" << std::endl;

Если это не решит вашу проблему, возможно, ваш компилятор устарел или установка повреждена. Попробуйте переустановить и/или обновить компилятор до последней версии.

Вопрос: При попытке использовать endl для завершения напечатанной строки компилятор говорит, что end1 является «необъявленным идентификатором».


Убедитесь, что вы не перепутали букву l (нижний регистр L) в endl с цифрой 1. endl – это все буквы. Убедитесь, что ваш редактор использует шрифт, который проясняет разницу между строчной буквой L, заглавной i и цифрой 1. Кроме того, во многих шрифтах, не предназначенных для программирования, можно легко перепутать заглавную букву o и цифру ноль.

Проблемы с Visual Studio

Вопрос: При компиляции с помощью Microsoft Visual C++ вы получаете фатальную ошибку C1010 с сообщением типа «c:vcprojectstest.cpp(263) :fatal error C1010: unexpected end of file while looking for precompiled header directive» (неожиданный конец файла при поиске директивы предварительно скомпилированного заголовка).


Эта ошибка возникает, когда компилятор Microsoft Visual C++ настроен на использование предварительно скомпилированных заголовков, но один (или несколько) ваших файлов кода C++ не включает #include "stdafx.h" или #include "pch.h" в качестве первой строки кода файла.

Предлагаемое нами решение – отключить предварительно скомпилированные заголовки, как это сделано в уроке «0.7 – Компиляция вашей первой программы».

Если вы хотите, чтобы предварительно скомпилированные заголовки были включены, чтобы решить эту проблему, просто найдите файл(ы), вызывающий ошибку (в приведенной выше ошибке виновником является test.cpp), и добавьте следующую строку в самом верху файла):

#include "pch.h"

В более старых версиях Visual Studio используется stdafx.h вместо pch.h, поэтому, если pch.h не решает проблему, попробуйте stdafx.h.

Обратите внимание, что для программ с несколькими файлами каждый файл кода C++ должен начинаться с этой строки.

Кроме того, вы можете отключить предварительно скомпилированные заголовки.

Вопрос: Visual Studio выдает следующую ошибку: «1MSVCRTD.lib(exe_winmain.obj) : error LNK2019: unresolved external symbol _WinMain@16 referenced in function «int __cdecl invoke_main(void)» (?invoke_main@@YAHXZ)» (неразрешенный внешний символ _WinMain@16).


Скорее всего, вы создали не консольное приложение, а графическое приложение Windows. Создайте заново свой проект и убедитесь, что вы создали его как консольный проект Windows (или Win32).

Вопрос: Когда я компилирую свою программу, я получаю предупреждение «Cannot find or open the PDB file» (не могу найти или открыть файл PDB).


Это предупреждение, а не ошибка, поэтому оно не должно повлиять на вашу программу. Однако она раздражает. Чтобы исправить это, перейдите в меню Debug (Отладка) → Options and Settings (Параметры) → Symbols (Символы) и установите флажок Microsoft Symbol Server (Сервер символов Microsoft).

Прочее

Вопрос: У меня есть еще одна проблема, которую я не могу понять. Как я могу быстро получить ответ?


По мере обучения у вас, несомненно, будут возникать вопросы или неожиданные проблемы. Что делать дальше, зависит от вашей проблемы. Но в целом есть несколько вещей, которые вы можете попробовать.

Сначала спросите Google. Найдите хороший способ сформулировать свой вопрос и выполните поиск в Google. Если вы получили сообщение об ошибке, вставьте точное сообщение в Google, используя кавычки. Скорее всего, кто-то уже задавал тот же вопрос, и вы найдете ответ.

Если это не поможет, спросите на сайте вопросов и ответов. Существуют веб-сайты, предназначенные для вопросов и ответов о программировании, например, Stack Overflow. Попробуйте разместить там свой вопрос. Не забудьте подробно описать, в чем заключается ваша проблема, и включить всю необходимую информацию, например, какую ОС и какую IDE вы используете.

Теги

C++ / CppFAQLearnCppДля начинающихОбучениеПрограммирование

Это ваша первая программа на C (или C++) — она не такая уж большая, и вы собираетесь скомпилировать ее. Вы нажимаете на compile (или вводите команду компиляции) и ждете. Ваш компилятор выдает пятьдесят строк текста. Вы выбираете слова warning и error. Задумываетесь, значит ли это, что все в порядке. Вы ищите полученный исполняемый файл. Ничего. Черт возьми, думаете вы, я должен выяснить, что все это значит …

Типы ошибок компиляции

Во-первых, давайте различать типы ошибок. Большинство компиляторов покажет три типа предупреждений во время компиляции:

  • предупреждения компилятора;
  • ошибки компилятора;
  • ошибки компоновщика.

Хоть вы и не хотите игнорировать их, предупреждения компилятора не являются чем-то достаточно серьезным, чтобы не скомпилировать вашу программу. Прочитайте следующую статью, которая расскажет вам, почему стоит дружить с компилятором и его предупреждениями. Как правило, предупреждения компилятора — это признак того, что что-то может пойти не так во время выполнения. Как компилятор узнает об этом? Вы, должно быть делали типичные ошибки, о которых компилятор знает. Типичный пример — использование оператора присваивания = вместо оператора равенства == внутри выражения. Ваш компилятор также может предупредить вас об использовании переменных, которые не были инициализированы и других подобных ошибках. Как правило, вы можете установить уровень предупреждений вашего компилятора — я устанавливаю его на самый высокий уровень, так что предупреждения компилятора не превращаются в ошибки в выполняемой программе (“ошибки выполнения”).

Тем не менее, предупреждения компилятора не должны останавливать работу вашей программы (если только вы не укажете компилятору рассматривать предупреждения как ошибки), так что они, вероятно, не так серьезны как ошибки.

Ошибки — это условия, которые препятствуют завершению компиляции ваших файлов.

Ошибки компилятора ограничены отдельными файлами исходного кода и являются результатом “синтаксических ошибок”. На самом деле, это означает, что вы сделали что-то, что компилятор не может понять. Например, выражение for(;) синтаксически не правильно, потому что цикл всегда должен иметь три части. Хотя компилятор ожидал точку с запятой, он мог также ожидать условное выражение, поэтому сообщение об ошибке, которое вы получите может быть что-то вроде:

line 13, unexpected parenthesis ‘)’

Заметьте, что ошибки компилятора всегда будут включать номер строки, в которой была обнаружена ошибка.

Даже если вы прошли процесс компиляции успешно, вы можете столкнуться с ошибками компоновщика. Ошибки компоновщика, в отличие от ошибок компилятора, не имеют ничего общего с неправильным синтаксисом. Вместо этого, ошибки компоновщика — это, как правило, проблемы с поиском определения функций, структур, классов или глобальных переменных, которые были объявлены, но не определены, в файле исходного кода. Как правило, эти ошибки будут иметь вид:

could not find definition for X

Как правило, процесс компиляции начинается с серии ошибок компиляции и предупреждений и, исправив их, вы столкнетесь с ошибками компоновщика. В свою очередь, я бы сначала исправлял ошибки компиляции, а затем ошибки компоновщика.

Ошибки компилятора — с чего начать?

Если вы столкнулись с перечнем пятидесяти или шестидесяти ошибок и предупреждений, то будет сложно определить с чего начать. Самое лучшее место, тем не менее, в начале списка. В самом деле, вы почти никогда не начинаете исправлять ошибки от конца файла до его начала по одной простой причине: вы не знаете ошибки ли они на самом деле!

Одна ошибка в верхней части вашей программы может вызвать целый ряд других ошибок компилятора, потому что эти строки могут рассчитывать на что-то в начале программы, что компилятор не смог понять. Например, если вы объявляете переменную с неправильным синтаксисом, компилятор сообщит о синтаксических ошибках, и что он не может найти объявление для переменной. Точка с запятой, поставленные не в том месте, могут привести к огромному количеству ошибок. Это происходит, потому что синтаксис C и C++ синтаксис позволяет объявить тип сразу же после его определения:

struct 
{
   int x;
   int y;
} myStruct;

код создаст переменную, MyStruct, с местом для хранения структуры, содержащей два целых числа. К сожалению, это означает, что если вы опустите точку с запятой, компилятор будет интерпретировать это так, как будто следующая вещь в программе будет структурой (или возвращает структуру).

Что-то вроде этого:

struct MyStructType
{
   int x;
   int y;
}

int foo()
{}

может привести к огромному количеству ошибок, возможно, включая сообщения:

extraneous ‘int’ ignored

Все это из-за одного символа! Лучше всего начать с самого верха.

 Анализ сообщения об ошибке

Большинство сообщений от компилятора будет состоять как минимум из четырех вещей:

  1. тип сообщения — предупреждение или ошибка;
  2. исходный файл, в котором появилась ошибка;
  3. строка ошибки;
  4. краткое описание того, что работает неправильно.

Вывод g++ для указанной выше программы может выглядеть следующим образом (ваши результаты могут отличаться, если вы используете другой компилятор):

foo.cc:7: error: semicolon missing after struct declaration

foo.cc это имя файла. 7 — номер строки, и ясно, что это ошибка. Короткое сообщение здесь весьма полезно, поскольку оно показывает именно то, что не правильно. Заметим, однако, что сообщение имеет смысл только в контексте программы. Оно не сообщает, в какой структуре не хватает запятой.

Более непонятным является другое сообщение об ошибке из той же попытки компиляции:

extraneous ‘int’ ignored

Программист должен выяснить, почему это произошло. Обратите внимание еще раз, что эта ошибка была вызвана проблемой в начале программы, не в строке 8, а раньше, когда в структуре не хватает точки с запятой. К счастью, понятно, что определение функции для foo было в порядке, это говорит нам о том, что ошибка должна быть где-то в другом месте программы. На самом деле, она должна быть в программе раньше — вы не будете получать сообщение об ошибке, которое указывает на синтаксическую ошибку до строки, на которой ошибка на самом деле произошла.

Это руководящий принцип вычисления ошибок компилятора: если сомневаетесь, посмотрите в программе раньше. Так как синтаксические ошибки могут позже иметь серьезные последствия, вполне возможно, что компилятор указывал номер строки, в которой на самом деле не было синтаксической ошибки!

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

Обработка непонятных или странных сообщений

Есть несколько особенно сложных типов ошибок компилятора. Первый — это необъявленная переменная, которую, как вам кажется, вы объявили. Часто, вы можете указать, где именно переменная была объявлена! Проблема в том, что часто переменная просто написана с ошибкой. К сожалению, это довольно трудно увидеть, так как обычно мы читаем то, что ожидаем, а не то, что есть на самом деле. Кроме того, есть и другие причины, почему это может быть проблемой — например, проблемы с видимостью!

Чтобы разобраться в возможных проблемах, я делаю так: в строке, где находится якобы необъявленная переменная, надо выполнить поиск текстовым редактором слова под курсором (в качестве альтернативы можно скопировать имя переменной и выполнить поиск), и если я записал его неправильно, оно не найдется. Также не надо вводить имя переменной вручную, так как вы случайно можете ввести его правильно.

Второе непонятное сообщение:

unexpected end of file

Что происходит? Почему конец файла будет «неожиданным» ? Ну, здесь главное думать как компилятор; если конец файла является неожиданным, то он,  должно быть, чего-то ждет. Что бы это могло быть? Ответ, как правило, «завершение». Например, закрывающие фигурные скобки или закрывающие кавычки. Хороший текстовый редактор, который выполняет подсветку синтаксиса и автоматический отступ, должен помочь исправить некоторые из этих ошибок, что позволяет легче обнаружить проблемы при написании кода.

В конечном счете, если сообщение непонятное, то подходите к проблеме, думая, как компилятор пытается интерпретировать файл. Это может быть трудно, когда вы только начинаете, но если вы обращаете внимание на сообщения и попробуете понять, что они могли бы означать, вы быстро привыкнете к общим закономерностям.

Наконец, если ничего не работает, вы всегда можете просто переписать несколько строк кода, чтобы убрать любые скрытые синтаксические ошибки, которые вы могли не увидеть. Это может быть опасно, так как вы можете переписать не ту секцию, но это может помочь.

Ошибки компоновщика

После того как вы окончательно исправили все ошибки синтаксиса, вздремнули, перекусили пару раз и морально подготовили себя к правильной компиляции программы, вы все равно можете столкнуться с ошибками компоновщика. Их часто довольно сложно исправить, потому что они не обязательно являются результатом того, что написано в вашей программе. Я вкратце опишу типичные видов ошибок компоновщика, которые можно ожидать, и некоторые пути их решения.

У вас могут возникнуть проблемы с тем, как вы настроили свой компилятор. Например, даже если включить нужные заголовочные файлы для всех ваших функций, вы все равно должны предоставить вашему компоновщику правильный путь в библиотеку, которая имеет фактическую реализацию. В противном случае, вы получите сообщение об ошибке:

undefined function

Обратите внимание на поддержку этих функций компилятором (это может произойти, если вы включите собственное объявление функции, чтобы обойти ошибку во время компиляции). Если ваш компилятор поддерживает эту функцию, то для решения проблемы обычно требуются конкретные настройки компилятора. Вам следует сообщить компилятору, где искать библиотеки и убедиться, что библиотеки были установлены правильно.

Ошибки компоновщика могут произойти в функциях, которые вы объявили и определили, если вы не включили все необходимые объектные файлы в процесс связывания. Например, если вы пишете определение класса в myClass.cpp, а ваша основная функция в myMain.cpp, компилятор создаст два объектных файла, myClass.o и myMain.o, а компоновщику будут нужны оба из них для завершения создания новой программы. Если оставить myClass.o, то у него не будет определения класса, даже если вы правильно включите myClass.h!

Иногда появляются незначительные ошибки, когда компоновщик сообщает о более чем одном определении для класса, функции или переменной. Эта проблема может появиться по нескольким причинам: во-первых, у объекта может быть два определения — например, две глобальные переменные объявлены как внешние переменные, чтобы быть доступными за пределами файла исходного кода. Это относится как к функциям, так и к переменным, и это, на самом деле, нередко случается. С другой стороны, иногда это проблема с директивами компоновщика; несколько раз я видел, как люди включают несколько копий одного и того же объектного файла в процесс связывания. И бинго, у вас есть несколько определений. Типичным проявлением этой проблемы является то, что у целого ряда функций есть несколько определений.

Последний странный тип ошибки компоновщика — сообщение

undefined reference to main

Данная ошибка компоновщика отличается от других тем, что она может не иметь ничего общего с объектом, включая файлы или правильные пути к вашей библиотеке. Напротив, это означает, что компоновщик пытался создать исполняемый файл и не смог понять, где расположена функция main(). Это может случиться, если вы забыли включить основную функцию, или, если вы попытаетесь скомпилировать код, который никогда не был отдельным исполняемым файлом (например, если вы попытались скомпилировать библиотеку).

Привет всем!

Сегодня решил попрактиковаться в написании программ с использованием библиотеки OpenCV версии 2.4.13.

Скачал, установил по инструкции, вошел в MSVS 2013, создал пустой проект на С++. В свойствах проекта поставил пути к папкам либов, пути к инклюд папкам (ко всем), сами либы в настройках компоновщика (во вкладке ввод),
и даже пути к папкам модулей OpenCV (тоже ко всем). Вбил вот этот код:

#include <opencv2/opencv.hpp>
int main(int argc, char** argv)
{
	// задаём высоту и ширину картинки
	int height = 620;
	int width = 440;
	// задаём точку для вывода текста
	CvPoint pt = cvPoint(height / 4, width / 2);
	// Создаёи 8-битную, 3-канальную картинку
	IplImage* hw = cvCreateImage(cvSize(height, width), 8, 3);
	// заливаем картинку чёрным цветом
	cvSet(hw, cvScalar(0, 0, 0));
	// инициализация шрифта
	CvFont font;
	cvInitFont(&font, CV_FONT_HERSHEY_COMPLEX, 1.0, 1.0, 0, 1, CV_AA);
	// используя шрифт выводим на картинку текст
	cvPutText(hw, "OpenCV Step By Step", pt, &font, CV_RGB(150, 0, 150));

	// создаём окошко
	cvNamedWindow("Hello World", 0);
	// показываем картинку в созданном окне
	cvShowImage("Hello World", hw);
	// ждём нажатия клавиши
	cvWaitKey(0);

	// освобождаем ресурсы
	cvReleaseImage(&hw);
	cvDestroyWindow("Hello World");
	return 0;
}

Жмякаю Отладка-Запуск без отладки- пишет следующий проект устарел: название проекта. Выполнить его сборку? Жму Да. Выдает: возникли ошибки сборки. продолжить и запустить последний успешно построенный вариант? Жму нет. Да не жму, т.к.
я недавно скомпилировал кривой код, который к сожалению не могу восстановить, он скомпилировался без ошибок, и теперь когда жму Да, открывается кривая консолька, с непонятными ошибками.

Собственно, когда нажал Нет, пишет кучу ошибок, а именно:

Ошибка 1
error LNK2019: ссылка на неразрешенный внешний символ _cvCreateImage в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 2
error LNK2019: ссылка на неразрешенный внешний символ _cvReleaseImage в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 3
error LNK2019: ссылка на неразрешенный внешний символ _cvSet в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 4
error LNK2019: ссылка на неразрешенный внешний символ _cvInitFont в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 5
error LNK2019: ссылка на неразрешенный внешний символ _cvPutText в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 6
error LNK2019: ссылка на неразрешенный внешний символ _cvNamedWindow в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 7
error LNK2019: ссылка на неразрешенный внешний символ _cvShowImage в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 8
error LNK2019: ссылка на неразрешенный внешний символ _cvDestroyWindow в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 9
error LNK2019: ссылка на неразрешенный внешний символ _cvWaitKey в функции _main
c:UsersDaniildocumentsvisual studio 2013ProjectsTestARTestARmain.obj
TestAR
Ошибка 10
error LNK1120: неразрешенных внешних элементов: 9
c:usersdaniildocumentsvisual studio 2013ProjectsTestARDebugTestAR.exe
TestAR

Вот такие вот дела. Надеюсь, поможете.

Заранее спасибо.

P.S. код скопипастил с сайта с инструкцией.

I recently updated from Visual Studio 2017 Community Edition to Visual Studio 2019 Community Edition.

Now, if I build my solution with errors, they will show up in the build output, but not all of them will appear in the error list. It would appear only errors of open files will show up in the error list. This is incredibly annoying.

I am not alone in this issue. It has been reported many times on Microsoft’s forums, but no one has a definitive solution.

I have tried a variety of solutions people suggested in those threads:

  • I have ensured the filters are legitimate: Entire Solution, Errors enabled, Build + Intellisense.
  • I have tried deleting the .vs folder and restarting Visual Studio.
  • I just updated to the very latest Visual Studio 2019 version. Supposedly there are many different versions of this error, happening in versions of Visual Studio all the way back to 2017. Some supposedly have been fixed…?
  • I have disabled parallel project loading.

I have experienced this before in other versions of Visual Studio with Razor pages. To my knowledge, that’s to be expected in Razor though.

The only other factor that I severely doubt impacts anything is that it’s a Visual Studio project generated by Unity editor. From what I’ve read, ASP.NET, Razor, Xamarin, and other frameworks have each had their own version of issue reported. Perhaps Unity is afflicted by it too, but I don’t see how or why. I doubt Unity’s auto-generated Visual Studio projects are that different from your standard library projects.

Кажется, что есть несколько ответов на этот вопрос, поэтому я добавлю личную информацию из личного опыта, надеясь, что это спасет кого-то время/стресс.

Убедитесь, что все проекты в вашем решении настроены на одну и ту же версию .NET.

Подобно OP, было 0 ошибок, но сборка не срабатывала. Тем не менее, была одна предупреждающая запись (похороненная между несколькими сотнями бесполезных предупреждений XML…), в которой говорилось, что один проект предназначался для другой версии .NET, чем проект, который ссылался на него. Вся проблема заключалась в том, что один проект в моем решении предназначался для .NET 4.5.2, когда остальные были нацелены на 4.5.1. Он должен работать даже с этим расхождением (следовательно, это было просто предупреждение), но, к сожалению, он сломал сборку.

Странная часть заключалась в том, что он построил/работал нормально некоторое время, но внезапно сборка начала сбой, вызвав одну проблему. Не уверен, что я сделал для этого, чтобы начать жаловаться на разные целевые версии .NET, но я чувствую, что в Visual Studio есть только некоторые загадки, которые никогда не будут решены.

Пару дней назад установил Visual Studio 2022 на Windows 10 (все обновления). Сегодня создал первый проект, попытался запустить (скомпилировать), но получил десятки ошибок о том, что не удаётся открыть источник файл "имя_файла.h" (E1696) + другие ошибки. Всего ошибок почти 500.

Список ошибок при попытке компиляции консольного проекта C++: тык.

C# компилируется, не компилируется видимо только C++.
Я открыл проводник в том месте (C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.33.31629include), где оно не может открыть эти «источник файл», и установил, что примерно треть всех файлов не имеют расширения (остальные файлы имеют расширение .h/.hpp).

Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Возникла ошибка трейд уже существует
  • Возникла ошибка просмотрите файл протокола declaration configuration
  • Возникла ошибка принтера эпсон
  • Возникла ошибка принтера кэнон

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии