User 13204940 Ответов: 3

Ошибки без причины C++


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

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

// CPPTestApp.cpp : Defines the entry point for the console application.
//
#include <regex>
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
	string content = readFromFile("C:\\Users\\me\\Desktop\\cpptest.txt");
	smatch sm;

	if (regex_search(content, sm, regex("[.+]")))
	{
		for (int i = 1; i < sm.size(); i++)
		{
			cout << sm[i] << endl;
		}
	}
	
    return 0;
}

char* readFromFile(std::string filename)
{
	string line;
	ifstream myfile(filename);

	if (myfile.is_open())
	{
		while (getline(myfile, line))
		{
			cout << line << '\n';
		}

		myfile.close();
	}
	else cout << "Unable to open file";
}


Error	C2065	'r': undeclared identifier 16	
Error	C2065	'r': undeclared identifier 13	
Error	C3861	'readFromFile': identifier not found 12	
Error	C2065	'regex': undeclared identifier 13	
Error	C3861	'regex_search': identifier not found 16	
Error	C2065	'sm': undeclared identifier 16	
Error	C2065	'sm': undeclared identifier 18	
Error	C2065	'sm': undeclared identifier 20	
Error	C2065	'smatch': undeclared identifier 14	
Error	C2228	left of '.size' must have class/struct/union 18	
Error	C2061	syntax error: identifier 'regex' 13	


Что я уже пробовал:

------------------------------------------------------------------------------------------

3 Ответов

Рейтинг:
8

User 13204940

Нелепый. #включить порядок, по-видимому, имеет значение.

#include <regex>
#include "stdafx.h"

должна стать
#include "stdafx.h"
#include <regex>


Dave Kreskowiak

Да, это так. Вы также должны взглянуть на ReadMe в проекте и в файле stdafx.h.

Richard MacCutchan

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

Рейтинг:
20

Richard MacCutchan

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

string content = readFromFile("C:\\Users\\me\\Desktop\\cpptest.txt");

Это прямая ссылка, так что readFromFile не определяется, когда компилятор читает эту строку.
Класс smatch также неопределенно, не совсем понятно, откуда, по вашему мнению, оно должно исходить?

И так далее...

[редактировать]
Я просто скопировал ваш код, и как только я исправил прямую ссылку, он скомпилировался (более или менее) чисто. Поэтому я подозреваю, что код, который вы имеете в этом вопросе, - это не тот код, который вызвал все эти ошибки.
[/редактировать]


[no name]

Теперь я переместил readFromFile в before int main(). Visual Studio распознает smatch, потому что он дает определение, когда я навожу на него курсор мыши. Почему же тогда он жалуется, что он не определен? Я использую std, а smatch-это std::smatch.

[no name]

Это единственный код, который у меня есть во всем проекте. Чистый проект.

[no name]

Теперь это все, что у меня есть, и теперь он жалуется, что std::smatch не существует. Почему же тогда другие люди могут заставить работать точно такой же код? код #include "файл stdafx.ч"

тап_п()
{
std::smatch sm;

возвращает 0;
}

CPallini

5.

Рейтинг:
0

CPallini

Цитата:
Теперь это все, что у меня есть, и теперь он жалуется, что std::smatch не существует. Почему же тогда другие люди могут заставить работать точно такой же код? код #include "файл stdafx.ч"

тап_п()
{
std::smatch sm;

возвращает 0;
}
Вы должны включить regex (И вам нужен C++ 11 совместимый компилятор). См. пример кода на этой странице документации: regex_match - ссылка на C++ [^].


[no name]

Даже с #include <regex> ошибки все еще сохраняются. Visual Studio 2017 Professional должен быть компилятором, совместимым с C++, иначе его предложение программирования на C++ было бы бессмысленным.

CPallini

Это связано с реализацией Microsoft предварительно скомпилированных заголовков (да, #include <regex> должны следовать включите "stdafx.h") видеть
https://stackoverflow.com/questions/4726155/whats-the-use-for-stdafx-h-in-visual-studio