MacOS Catalina 10.15.7, VSCode 1.64.2 (Universal) :I had the intellisense working for my project without problems, but then for whatever reason it has stopped working in some cases:
whenever I assign something to an 'auto variable', for example: auto val = (float)foo; I'd get intellisense error: int val: explicit type is missing ('int' assumed)C/C++(260).
Class enums are not recognised as they should, so I can't use EnumClass::Enum or get any enum-related autocomplete support.
Those are the most reoccuring problems, but I'd say the intellisense generally doesn't work properly.
I removed everything related to VSCode (using this: How to completely uninstall vscode on mac) and reinstalled with just C/C++ extention enabled and the problem persists. I have other people using the same setup with this project and they don't have this problem. I tried older versions of the extention without success aswell.
Is there anything I could try to get it back to work?
The issue seems to be that intellisense is using older c++ version for determining the syntax.
The way to fix this is to set to some newer version like c++17
Go to settings in your VSCode and search for Cpp Standard and from the dropdown select c++17 or any newer version that you use.
In case you follow JSON style settings, then search for following
"C_Cpp.default.cppStandard": "c++17"
Attaching the screenshot of the settings page
This is code for a template which i am trying to inherit. This is not giving any error in programme but what these warning are trying to suggest
Basically, VSCode uses linters tools to analyze code errors. Linters can show the errors and warnings you see there.
If the installed linter doesn't support the syntax/wasn't written for this syntax, it will throw an error/warning. It's common to see those, and you can force-ignore them on VSCode Settings (More info here).
You can also change and set the linter by yourself on settings, or you can install an extension that does that for you.
After I upgrade my VS2017 to the latest version (15.7.3), Document Format for C++ (Ctrl+K,Ctrl+D) will reorder all included file lines, and it also reformat other code to cause many compiling errors. Right now I have to use a diff tool to double-check code and reverse unwanted changes.
Does anyone have any ideas?
OK, after searching around the net, it looks like recent vs2017 added ClangFormat support. The default settings messed up my code. Here is vs2017 blog:
https://blogs.msdn.microsoft.com/vcblog/2018/03/13/clangformat-support-in-visual-studio-2017-15-7-preview-1/
Skimming through the ClangFormat document: https://clang.llvm.org/docs/ClangFormat.html, the code style and formatting features can be customized. Since I'm new to this, I have turned it off for the time being (Tools/Options -> TextEditor->C/C++->Formatting->General->Enable ClangFormat support).
In my C++ code vim shows red highlighted brackets in the following piece:
This is some in-built functionality as I tried removing .vimrc, but it still shows them red. What's going on and how to fix it?
Vim has only very limited C++ syntax highlighting capability built in. There is currently no support for C++11.
But there are, of course, plugins! Here's one that makes the error go away:
C++11 Syntax Support: A port of the existing C++ syntax to allow for C++11 features
To install, download the archive and extract the files into your ~/.vim/syntax directory. Enable the C++11 file type with :setf cpp11 or follow the instructions on the plugin home page.
How to turn off error highlighting (red wave under the code) for c++11 cycle range-based operators like that?
int myint[] = {1,2,3,4,5};
for (auto x : myint){/**/}
Hover prompt shows "unexpected token :". The code compiles perfectly.
Another issue - the autocomplete doesn't show unique_ptr in std:: namespace, though compiles OK.
Qt Creator 2.4.0 Based on Qt 4.7.4 (32 bit) Built on Dec 12 2011 at
01:10:32
I don't understand the line of reasoning in Andrew's answer. Why would customizing syntax checking make sense? The syntax is either correct given the context set by the compiler command line, or it is wrong. If it is wrong, it should be marked as such, if not, not. If correct code is marked as wrong, it is a bug, or at least unsupported feature, in the IDE, and it needs a fix, not "customization".
Having said that, the cited example
int myint[] = {1,2,3,4,5};
for (auto x : myint){/**/}
works fine here (fairly recent build from master branch).
Regarding the other comment on Kate: Kate's syntax highlighting is used by Qt Creator as fallback in cases where there is no more specific syntax highlighting available for a file. In the case of C++ (98/03/11) there is a real code model used, not Kate's definitions.
There is "syntax highlighting" (coloring) and there is "syntax checking" (wavy underlines). The syntax coloring does seem to be related to Kate as #Koying suggests, you can modify the colors and turn it off. As of Qt Creator 2.5.0 it doesn't seem to have a problem with most C++11 examples I paste off the web, although your example does indeed still have the underline:
http://labs.qt.nokia.com/2012/05/09/qt-creator-2-5-0-released/
Also unfortunately, at the time of writing (June 13th 2012, which is about a month after the release) the latest integrated SDK package is still installing Qt Creator 2.4.1 by default. :-/
If this is the boat someone is in and wants to try the latest, don't do what I did by wiping out your Qt SDK install using /opt/QtSDK/SDKMaintenanceTool! That wasted time on a reinstall, after which I executed a sudo rm -r /opt/QtSDK/QtCreator, then told the new Qt Creator release to install to /opt/QtSDK/QtCreator. I'll update this post if I hit a snag with that choice!
http://qt-project.org/wiki/Qt_Creator_Releases
BUT though it seems to work with many C++11 constructs it does nothing for your example nor the particular case I tripped across, which is the unspaced<nested<syntax>> for templates.
(Note: It may seem like a minor thing, but it's a big C++11 feature for me. I hate dealing with having to do tailspaced<nested<syntax> >...which led me to always do fullyspaced< nested< syntax > > on all templates to keep things consistent. Even simple cases like vector< int >. Now that they fixed the compiler, I'm ready to kill all of that whitespace noise.)
There doesn't seem to be any way to turn off the wavy underlines (unless you recompile Qt Creator??).
in qt-creator-2.5.0-src\src\plugins\cpptools\cppmodelmanager.cpp:
QTextCharFormat errorFormat;
/* disable error underline
errorFormat.setUnderlineStyle(QTextCharFormat::WaveUnderline);
errorFormat.setUnderlineColor(Qt::red);
*/
// set up the format for the warnings.
QTextCharFormat warningFormat;
/* disable warning underline
warningFormat.setUnderlineStyle(QTextCharFormat::WaveUnderline);
warningFormat.setUnderlineColor(Qt::darkYellow);
*/
Either way, it's an insane consequence of duplicating the work of the compiler in the IDE instead of having the two share front-end code. We live in the dark ages of software. Won't someone save us? [/rant]
Here's some of the relevant code (I think):
https://qt.gitorious.org/qt-creator/qt-creator/blobs/master/src/plugins/cppeditor/cpphighlighter.cpp
...and the lexer here, note the member _cxx0xEnabled:
https://qt.gitorious.org/qt-creator/qt-creator/blobs/master/src/libs/cplusplus/SimpleLexer.cpp#line80
Besides your for syntax, the template spacing is the only thing I've found in C++11 that causes the lines. That's major enough to me that I might just build my own QtCreator to address it!
If you're writing in C++11 you should change from using QT Creator as the IDE to using Eclipse CDT. At least this is how I solved this problem. QT Creator doesn't seem to have any way to customize this real-time syntax checking. Eclipse on the other hand is extensively customizable in this regard.
Update: I think that QtCreator has improved its support for newer versions of C++ since this answer was given, so it is no longer correct. I can't delete it as it is an accepted answer.
Qt Creator is using the syntax highlighting definitions from the Kate editor (from KDE). See Tools-Options-Text Editor-Generic Highlighter.
If Kate has a definition for c++11, you can use it or you can develop your own.
Using MSVC compiler, you need to add the line:
/std:c++11
To your project's project.cxxflags configuration file, where project must be replaced by the name of your project. This file is located at the root of your project directory, you may have to create it if it does not already exist.
Remark: this setting is a MSVC parameter so the syntax would likely be different for other compilers.
Tested with Qt Creator 4.15.0-rc1 (April 2021) and Visual Studio 2017 on Windows, where the error:
`error: no member named 'optional' in namespace 'std'` when trying to use std::optional from header <optional>
disappear when adding /std:c++17 (std::optional was added in C++17).