От вектора не указано имя типа К ожидаемому неквалифицированному идентификатору/перебору C++

Короче говоря. Я пытаюсь запустить этот код в VS Studio IDE.

#include <iostream>
#include <vector>

using std::vector;

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        for(int i = 0; i < nums.size(); i++){
            for(int j = i + 1; j < nums.size(); j++){
                if (nums[i] + nums[j] == target){
                    return {i, j};
                }
            }            
        }
        return {};
    }
};

Мне пришлось добавить #include, чтобы решить первую проблему. Но теперь его высказывание:

использование-объявление для не-члена в области класса

ожидаемый неквалифицированный идентификатор перед токеном '<'

Сюжет сгущается. Он отлично работает на leetcode без #include . Ничего из этого не происходит.

Проблема с вектором или что? И почему код VS Studio ненавидит это, но отлично работает на leetcode? https://leetcode.com/problems/two-sum/solutions/1439021/c-brute-force-hashmap-solutions/?q=brute&orderBy=most_votes&languageTags=cpp

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        for(int i = 0; i < nums.size(); i++){
            for(int j = i + 1; j < nums.size(); j++){
                if (nums[i] + nums[j] == target){
                    return {i, j};
                }
            }            
        }
        return {};
    }
};

код ОГ.

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

Вы получаете ошибку компиляции в VSCode или это просто редактор жалуется? Также код не должен компилироваться в программу, потому что в нем отсутствует int main()

drescherjm 18.01.2023 20:21

VSCode жалуется. Можете ли вы уточнить, что вы подразумеваете под компиляцией в программу? @drescherjm 'C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/‌​../../../../x86_64-w‌​64-mingw32 /bin/ld.ex‌​e: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/.‌​./../../../lib /libmi‌​ngw32.a(lib64_libmin‌​gw32_a-crtexewin.o): в основной функции: C:/M/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/crtex‌​ewin .c:70: неопределенная ссылка на `WinMain' collect2.exe: ошибка: ld вернул 1 статус выхода' Сейчас это происходит с добавлением int main(), но это происходило и раньше.

The Sideshow 18.01.2023 20:33

В С++ требуется основная функция. Этот ответ объясняет, что такое действительные подписи:

drescherjm 18.01.2023 20:39

Если вы сохранили свой файл и у вас есть int main() { // code here }, у вас не должно быть ошибки о WinMain. Компоновщик в MinGW сначала ищет main(), затем WinMain, если он не находит ни того, ни другого, он заканчивается ошибкой о WinMain. Также обратите внимание, что запуск задач сборки или отладки не будет автоматически сохранять ваш код по умолчанию.

drescherjm 18.01.2023 20:41

@drescherjm Ну, int main() есть, и это дало мне это. Так что должен быть другой элемент или причина, по которой это произойдет. Если только моя идея не настроена правильно. Я не понимаю, что ты пытаешься сказать. Это здесь. Но да, я сохраняю его, прежде чем бежать. Спасибо.

The Sideshow 18.01.2023 21:20

«неопределенная ссылка на WinMain» говорит мне, что вы, вероятно, создали свое решение как приложение с графическим интерфейсом Windows, а не как консольное приложение. Компоновщик ищет функцию точки входа GUI (WinMain) вместо стандартной точки входа C++ (main). Создайте новое решение и настройте его как консольное приложение.

Miles Budnek 18.01.2023 21:35

int main() находится в другом исходном файле? Помните, что VSCode по умолчанию создает только активный файл. В режиме по умолчанию без расширений сборки, таких как CMakeTools или MakeFileTools, вам необходимо отредактировать файл tasks.json, если у вас есть более 1 файла cpp.

drescherjm 18.01.2023 22:27

@drescherjm Что ж, удаление int main из другого файла .cpp, похоже, предотвратило появление этой ошибки. Но теперь он «пустой» и делает то же самое, что я разместил здесь в Edit 2 с консоли.

The Sideshow 19.01.2023 15:02

Кстати, вот информация о том, как заставить VSCode скомпилировать более 1 файла: https://code.visualstudio.com/docs/cpp/config-mingw#_modifyi‌​ng-tasksjson

drescherjm 19.01.2023 15:10
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
9
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хотя я бы НЕ рекомендовал использовать using на уровне заголовка из-за конфликтов пространств имен, если вы действительно хотите его использовать, рассмотрите вариант ниже:

#include <iostream>
#include <vector>

using namespace std;

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        for(int i = 0; i < nums.size(); i++){
            for(int j = i + 1; j < nums.size(); j++){
                if (nums[i] + nums[j] == target){
                    return {i, j};
                }
            }            
        }
        return {};
    }
};

Тем не менее, большинство людей согласятся, что приведенный ниже подход выглядит более «современным».

#include <iostream>
#include <vector>
#include <tuple>
#include <optional>

class Solution {
public:
    std::optional< std::tuple<int,int> > twoSum( const std::vector<int>& nums, int target) {
        for( int i = 0; i < nums.size(); i++) {
            for(int j = i + 1; j < nums.size(); j++) {
                if ( nums[i] + nums[j] == target){
                    return {{i, j}};
                }
            }            
        }
        return {};
    }
};


int main() {
    std::vector<int> vec{1,2,3,4};
    int total = 5;
    Solution s;
    auto result = s.twoSum( vec, total );
    if ( result ) {
        auto [i,j] = result.value();
        std::cout << vec[i] << " + " << vec[j] << " = " << total << std::endl;
    }
}

Это сработало. Но я едва понимаю, почему это работает. Кажется, вы разделили их и сделали основным еще один экземпляр. Кажется, вы также переписали код и по-другому определили вектор. Не понимаю. Но спасибо конечно. Но не понимаю ответа, ха-ха

The Sideshow 18.01.2023 21:23

Ответ только первый. Второй код — это просто улучшение с использованием optional и tuple.

Henrique Bucher 18.01.2023 21:24

А, тогда не работает. Это снова дает мне это: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/.‌​./../../../x86_64-w6‌​ 4-mingw32/bin/ld.exe‌​: C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/.‌​./../../.. /lib/libmi‌​ngw32.a(lib64_libmin‌​gw32_a-crtexewin.o): в функции main': C:/M/mingw-w64-crt-git/src/mingw-w64/mingw-w64-crt/crt/crtex‌​ewin.c:70: undefined reference to WinMain' collect2.exe: ошибка: ld вернул 1 статус выхода

The Sideshow 18.01.2023 21:29

Вам нужна основная функция, чтобы она что-то делала с этим классом.

Henrique Bucher 18.01.2023 22:08

Класс решения? Итак, мне нужно искать функции для решения класса?

The Sideshow 18.01.2023 22:26

Поэтому я добавил int main() и добавил ';' ко всем строкам он продолжал говорить, что ожидал один в, и теперь он дает мне пустой пробег. Теперь он работает, так что это прогресс? См. Редактировать 2. @Ноле Ксум

The Sideshow 18.01.2023 23:11

Другие вопросы по теме