2015-12-08 5 views
-1

В любом месте, где я пытаюсь использовать std::map с любым изменением параметров типа, мне предоставляется красная подсветка синтаксиса, которая должна указывать на ошибку компилятора, но Я все еще могу компилировать и запускать без проблем. Я перезапустил визуальную студию, очистил свой проект и перестроил проект, но проблема все еще сохраняется. Я также попытался удалить .sdf, поскольку я думал, что это может спасти что-то странное в его истории, по крайней мере, из того, что я исследовал, это могло быть причиной. Я тоже на уровне 4-го уровня; Я попытался опустить его, но не сок.Тип 'std :: map <std :: basic_string <char>, int>' не заполнен

Syntax Highlighting Error

Edit 1: Это на самом деле только кажется проблемой, когда часть функции члена, если он находится в свободной функции, я не получаю подсветку синтаксиса.

Edit 2:

  • main.cpp

    #include "MCVE.h" 
    
    int main() 
    { 
        return 0; 
    } 
    
  • MCVE.cpp

    #include "MCVE.h" 
    #include <map> 
    
    MCVE::MCVE() 
    { 
    } 
    
    void MCVE::Test() const 
    { 
        // syntax highlighting error appears here 
        std::map<std::string, int> myMap; 
    } 
    
    MCVE::~MCVE() 
    { 
    } 
    
  • MCVE.h

    #pragma once 
    
    class MCVE 
    { 
    public: 
        MCVE(); 
        void Test() const; 
        ~MCVE(); 
    }; 
    

Edit 3: Я принял ответ Пита Беккера, но проблема, кажется, сохраняются только на моей локальной машине. Я отметил это с помощью Visual Studio, потому что предположил, что с ним что-то не так, потому что на моем домашнем компьютере есть проблема с подсветкой, а не мой рабочий компьютер.

Final Edit: Проблема оказалась в том, что один из заголовков, которые были включены в базовый тип класса у меня был вопрос с использовал header guards вместо pragma once, как это было в файле я работал в. Добавление правильных операторов #include и прямое указание пространства имен на функциях не помогло. Исправлена ​​проблема с заменой header guards на pragma once.

+0

Где находится '#include '? – Simple

+0

@Simple Он находится в родительском заголовочном файле, поэтому я пропустил его. В том числе это не решает проблему. – user1598725

+0

У вас есть 'using namespace std;' где-нибудь? Вы пытались использовать 'std :: string' для типа ключа? –

ответ

1

Новый код по-прежнему отсутствует #include <string>. Тот факт, что компилятор не жалуется на имя std::string, означает, что он был объявлен где-то; заголовки часто используют форвардные объявления для имен, которые определены в других местах, чтобы избежать раздувания заголовков. Это хорошо работает и соответствует стандарту, но вы должны следовать дисциплине, имеющей директиву #include для соответствующего заголовка для каждого стандартного типа библиотеки, который вы используете.

Смежные вопросы