Я получаю эту ошибку два раза в одной строке, но в разных местах (та же проблема):
Documents/JoeInstaller.cpp:33:43: error: use of undeclared identifier 'buffer'
memset(buffer, (char)NULL, sizeof(buffer)))
^
Documents/JoeInstaller.cpp:33:16: error: use of undeclared identifier 'buffer'
memset(buffer, (char)NULL, sizeof(buffer)))
Вот код, который у меня есть:
#include <iostream>
#include <vector>
#include <string>
#include <fstream>
#include <stdio.h>
#include <curl/curl.h>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
float pythonver;
int main(int argc, char* argv[]){
cout << "Press enter\n::";
if (cin.get() == '\n')
char buffer[1000];
FILE* progOutput;
progOutput = popen("which python3.6", "r");
if (!progOutput) {
cerr<<"npopen failedn";
exit(1);
}
memset(buffer, (char)NULL, sizeof(buffer)))
if (fread(buffer, sizeof(char), sizeof(char) * sizeof(buffer), progOutput) < 0) {
cerr<<"nfread failedn";
exit(1);
}
if (pclose(progOutput) < 0) {
cerr<<"npclose failedn";
exit(1);
}
pythonver << atof(buffer<<endl.c_str());
if (pythonver) {
cout << "Hooray! Now you need to install python3.6 or later from source!";
}
В общем, я пытаюсь получить версию Python. Я делаю это через всплывающее окно и сохраняю результаты в строку. При этом возникла ошибка.
Не по теме: ваш код полон неидиоматического использования C (это вряд ли идиоматический C++). Попробуйте найти более опытного программиста на C и попросите ревью кода. Ваш следующий сюрприз будет на atof(buffer<<endl.c_str()).
Это не решает вопрос, но учтите, что sizeof(char) всегда равен 1.





В этой строке отсутствует фигурная скобка:
if (cin.get() == '\n')
Следовательно, ветка охватывает только следующую строку (см. Notes здесь, в конце страницы), который является декларацией buffer:
if (cin.get() == '\n')
char buffer[1000];
// buffer is out of scope here
В зависимости от того, что вы хотите, вам необходимо добавить фигурные скобки вокруг всего блока или некоторых его частей, чтобы поддерживать buffer в рабочем состоянии, пока он используется.
Поэтому я бы добавил его в конец (cin.get() == '\n'), а затем просто обернул бы его вокруг частей, где я использую буфер? Спасибо!
[teach-me]Вы написалиif (cin.get() == '\n') char buffer[1000];. Это превращает объявлениеbufferв тело оператораif, и область действияbufferзаканчивается в конце оператораif, что немедленно.