В разработке на Java возникает множество типичных проблем, одна из которых — ошибка «Cannot resolve symbol» в среде разработки IntelliJ IDEA. Эта ошибка возникает,
В разработке на Java возникает множество типичных проблем, одна из которых — ошибка «Cannot resolve symbol» в среде разработки IntelliJ IDEA. Эта ошибка возникает, когда среда разработки не может найти определенный класс или метод, который используется в коде. Часто это происходит при добавлении новых зависимостей в проект.
Пример проблемы
Возьмем для примера Maven проект, в котором добавлена зависимость log4j. Все работает отлично, код компилируется и созданные юнит-тесты выполняются без ошибок.
Затем в этот проект добавляется новая зависимость — библиотека jmime. После этого IntelliJ IDEA начинает выдавать ошибку «Cannot resolve symbol» для всех классов и методов из этой библиотеки. При этом код все равно успешно компилируется и выполняется.
Возможные причины
Такое поведение IntelliJ IDEA может быть вызвано несколькими причинами:
- Библиотека jmime не была корректно добавлена в проект. В этом случае IntelliJ IDEA не может найти классы и методы из этой библиотеки и, следовательно, не может разрешить символы.
- В настройках среды разработки задан неправильный путь к JDK. IntelliJ IDEA использует JDK для компиляции кода, и если путь к JDK задан неверно, то среда разработки не сможет компилировать код.
- Проект содержит ошибки в коде, которые мешают IntelliJ IDEA правильно анализировать код и разрешать символы.
Решение проблемы
Чтобы решить проблему «Cannot resolve symbol» в IntelliJ IDEA, можно применить следующие шаги:
- Проверить, что библиотека jmime корректно добавлена в проект. Для этого нужно открыть файл pom.xml и убедиться, что в нем присутствует соответствующая зависимость.
- Проверить, что в настройках IntelliJ IDEA задан правильный путь к JDK. Для этого нужно перейти в настройки среды разработки (File -> Project Structure -> Project SDK) и убедиться, что выбран правильный JDK.
- Проверить код проекта на наличие ошибок. Если код содержит ошибки, то IntelliJ IDEA может неверно анализировать код и выдавать ошибку «Cannot resolve symbol».
- Если все вышеуказанные шаги не помогли, то можно попробовать переиндексировать проект в IntelliJ IDEA. Для этого нужно выбрать пункт меню File -> Invalidate Caches / Restart, а затем нажать кнопку «Invalidate and Restart».
Эти шаги помогут решить проблему «Cannot resolve symbol» в IntelliJ IDEA и продолжить разработку без препятствий.
As the error message said, you’re getting out of the bound of the vector.
Given std::copy(block, block+1, dest.begin());
, dest
is supposed to contain at least the same number of elements (i.e. one element here), but it’s empty in fact.
You can use resize
instead of reserve
,
std::vector<W> dest;
dest.resize(1);
std::copy(block, block+1, dest.begin());
Or just
std::vector<W> dest(1);
std::copy(block, block+1, dest.begin());
Or use std::back_inserter
to get an std::back_insert_iterator
.
The container’s
push_back()
member function is called whenever the iterator (whether dereferenced or not) is assigned to.
std::vector<W> dest;
dest.reserve(1);
std::copy(block, block+1, std::back_inserter(dest));
What are common causes for IntelliJ IDEA not being able to resolve built-in JVM types and methods? For example, when I mouse over String
the tooltip says «Cannot resolve symbol ‘String'». It’s as if IntelliJ has doesn’t know where the JVM is.
By the way, I am running OS X 10.6.6. Everything was working fine until I ran the system update this morning.
Cœur
37.3k25 gold badges196 silver badges267 bronze badges
asked Jan 6, 2011 at 19:13
Landon KuhnLandon Kuhn
76.6k45 gold badges104 silver badges130 bronze badges
2
Most likely JDK configuration is not valid, try to remove and add the JDK again as I’ve described in the related question here.
answered Jan 6, 2011 at 19:20
CrazyCoderCrazyCoder
390k172 gold badges990 silver badges906 bronze badges
1
First check if you have configured JDK correctly:
- Go to File->Project Structure -> SDKs
- your JDK home path should be something like this:
/Library/Java/JavaVirtualMachine/jdk.1.7.0_79.jdk/Contents/Home - Hit Apply and then OK
Secondly check if you have provided in path in Library’s section
- Go to File->Project Structure -> Libraries
- Hit the + button
- Add the path to your src folder
- Hit Apply and then OK
This should fix the problem
answered Sep 28, 2015 at 3:03
4
I was facing the same problem when import projects into IntelliJ.
for in my case first, check SDK details and check you have configured JDK correctly or not.
Go to File-> Project Structure-> platform Settings-> SDKs
Check your JDK is correct or not.
Next, I Removed project from IntelliJ and delete all IntelliJ and IDE related files and folder from the project folder (.idea, .settings, .classpath, dependency-reduced-pom). Also, delete the target folder and re-import the project.
The above solution worked in my case.
answered Aug 21, 2020 at 5:24
Maulik KakadiyaMaulik Kakadiya
1,4671 gold badge21 silver badges31 bronze badges
1
For me, I had to remove the intellij internal sdk and started to use my local sdk. When I started to use the internal, the error was gone.
answered Feb 27, 2021 at 21:19
I tried almost everything but nothing was helping with the ibm jdk 1.8. to fix this issue. then I found an article from https://youtrack.jetbrains.com/issue/IDEA-279214/Cannot-resolve-symbol-String-when-using-IBM-JDK-180 and it worked like charm!!!
so sharing original help credit goes to @Serge Barano. incase anybody needs and not able to able to resolve the issue using previous solutions like me.
according to the article answer is:
IBM JDK has a weird layout and the jar with the String class is in bin directory for some reason:
d:\dev\ibm_sdk80\jre\bin\default\jclSC180\vm.jar
If you add it to the JDK classpath in IntelliJ IDEA, the issue should resolve:
answered Jun 1, 2022 at 19:56
Priyanka WaghPriyanka Wagh
6251 gold badge8 silver badges17 bronze badges
For me, IntelliJ could autocomplete packages, but never seemed to admit there were actual classes at any level of the hierarchy. Neither re-choosing the SDK nor re-creating the project seemed to fix it.
What did fix it was to delete the per-user IDEA directory ( in my case ~/.IntelliJIdea2017.1/
) which meant losing all my other customizations… But at least it made the issue go away.
answered Jul 6, 2017 at 2:03
DarienDarien
3,50220 silver badges35 bronze badges
First of all you should try File | Invalidate Caches and if it doesn’t help, delete IDEA system directory. Then re-import the Maven project and see if it helps.
answered Aug 12, 2021 at 11:16
In my case, cloning repo from the remote was the easiest way to solve this issue.
answered Apr 27, 2022 at 18:14
For me ,
File -> project structure -> Project Language Level (11) selection worked. Local variable syntax for lambda paramters.
answered Oct 18, 2021 at 9:42
In my case, right click on String then choose «Show Context Actions», it will give you option to Setup JDK, then click always downloaded. Then the error will be gone.
answered May 4 at 2:06
I get this exception when using the file: test/samples/rssexpanded-1/10.png
this is the stacktrace:
BarcodeTests.exe!std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<ZXing::OneD::DataBar::Pair>>>::_Verify_offset(const __int64 _Off=2) Line 116 C++ Symbols loaded. BarcodeTests.exe!std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<ZXing::OneD::DataBar::Pair>>>::operator+=(const __int64 _Off=2) Line 123 C++ Symbols loaded. BarcodeTests.exe!std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<ZXing::OneD::DataBar::Pair>>>::operator+(const __int64 _Off=2) Line 130 C++ Symbols loaded. BarcodeTests.exe!ZXing::OneD::FindValidSequence<std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<int>>>>(const std::map<int,std::vector<ZXing::OneD::DataBar::Pair,std::allocator<ZXing::OneD::DataBar::Pair>>,std::less<int>,std::allocator<std::pair<int const ,std::vector<ZXing::OneD::DataBar::Pair,std::allocator<ZXing::OneD::DataBar::Pair>>>>> & all={...}, std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<int>>> begin={...}, std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<int>>> end={...}, std::vector<ZXing::OneD::DataBar::Pair,std::allocator<ZXing::OneD::DataBar::Pair>> & stack={...}) Line 286 C++ Symbols loaded. BarcodeTests.exe!ZXing::OneD::FindValidSequence(std::map<int,std::vector<ZXing::OneD::DataBar::Pair,std::allocator<ZXing::OneD::DataBar::Pair>>,std::less<int>,std::allocator<std::pair<int const ,std::vector<ZXing::OneD::DataBar::Pair,std::allocator<ZXing::OneD::DataBar::Pair>>>>> & all={...}) Line 314 C++ Symbols loaded. BarcodeTests.exe!ZXing::OneD::DataBarExpandedReader::decodePattern(int rowNumber=34, ZXing::PatternView & view={...}, std::unique_ptr<ZXing::OneD::RowReader::DecodingState,std::default_delete<ZXing::OneD::RowReader::DecodingState>> & state={...}) Line 369 C++ Symbols loaded. BarcodeTests.exe!ZXing::OneD::DoDecode(const std::vector<std::unique_ptr<ZXing::OneD::RowReader,std::default_delete<ZXing::OneD::RowReader>>,std::allocator<std::unique_ptr<ZXing::OneD::RowReader,std::default_delete<ZXing::OneD::RowReader>>>> & readers={...}, const ZXing::BinaryBitmap & image={...}, bool tryHarder=true, bool rotate=false, bool isPure=false, int maxSymbols=0) Line 138 C++ Symbols loaded. BarcodeTests.exe!ZXing::OneD::Reader::decode(const ZXing::BinaryBitmap & image={...}, int maxSymbols=0) Line 230 C++ Symbols loaded. BarcodeTests.exe!ZXing::MultiFormatReader::readMultiple(const ZXing::BinaryBitmap & image={...}) Line 82 C++ Symbols loaded. BarcodeTests.exe!ZXing::ReadBarcodes(const ZXing::ImageView & _iv={...}, const ZXing::DecodeHints & hints={...}) Line 102 C++ Symbols loaded.
the decode hints are set like this
ZXing::DecodeHints().setTryHarder(true).setTryRotate(true).setTryCode39ExtendedMode(true).setReturnCodabarStartEnd(true);
the problem seems to be that in ODDataBarExpandedReader.cpp, FindValidSequence():
constexpr int N = 2;
// TODO c++20 ranges::views::take()
auto& pairs = ppairs->second;
for (auto p = pairs.begin(), pend = std::min(pairs.end(), pairs.begin() + N); p != pend; ++p) {
// skip p if it is a half-pair but not the last one in the sequence
if (!p->right && std::next(begin) != end)
continue;
.....
}
N
is 2
, but pairs has only one element in it. So pairs.begin() + N
goes over the end of the vector…
Вопрос
Я пытаюсь сделать очень простую игру на память, и у меня возникла следующая проблема с векторами.
Выражение не может искать итератор вектора после завершения
вот мой код
#include <iostream>
#include <vector>
#include <algorithm>
#include <random>
using namespace std;
void play();
void filler();
char faceup(int);
vector<char> cards (50);
int candy= 0;
int main()
{
filler();
play();
}
char faceup(int C) {
return cards[C];
}
void play() {
int n,l;
char p, s;
for (int i = 0; i < cards.size(); i++)
{
cout << cards[i];
}
cout << endl;
while (candy<50)
{
cout << "choose first card"<<endl;
cin >> n;
cout << "choose second card"<<endl;
cin >> l;
if (l == n) {
cout << "the cards are the same, try it again"<<endl;
}
else
{
p = faceup(n);
s = faceup(l);
cout << "The first card is: " + p;
cout << "The second card is: " + s;
if (s==p)
{
candy++;
cards.erase(cards.begin()+s);
cards.erase(cards.begin() + p);
}
}
}
}
void filler() {
//random_device rd;
//default_random_engine rng(rd());
int accountant = 0;
for (int i = 0; i < cards.size()/2; i++)
{
for (int o = 0; o < 2; o++) {
cards[accountant] = i+65;
accountant++;
}
}
//shuffle(cards.begin(), cards.end(), rng);
}
ошибка возникает с любым целым числом, которое я ввожу. Я использовал компилятор visual studio, затем я использовал dev c++. Во всех случаях я получал одну и ту же или аналогичную ошибку
Заранее благодарю на миллион
1
Лучший ответ
В вашем коде, в строке 11, вы определили вектор, длина которого равна 50, и если мы дадим нашему вектору число, выходящее за пределы чисел от 0 до 49, программа не должна запускаться.
Что вы столкнулись с ошибкой, о которой я упоминал выше в строках 48 и 49 вашей программы.
Например, если пользователь вводит номер своей карты 0 и 1, размеры s и p равны 66, а в строках 48 и 49 указано перейти к нашему векторному индексу 66, что создает проблему для запуска нашей программы.
enter code here
//////////error/////////////////////////
cards.erase(cards.begin()+s);
cards.erase(cards.begin() + p);
//////////error/////////////////////////
На других языках
Эта страница на других языках
empty row
……………………………………………………………………………………………………
……………………………………………………………………………………………………
……………………………………………………………………………………………………
……………………………………………………………………………………………………
……………………………………………………………………………………………………
……………………………………………………………………………………………………
……………………………………………………………………………………………………
……………………………………………………………………………………………………
……………………………………………………………………………………………………
……………………………………………………………………………………………………
……………………………………………………………………………………………………
……………………………………………………………………………………………………
……………………………………………………………………………………………………