Error: 'Null' Was Not Declared in This Scope

error: ‘NULL’ was not declared in this scope

NULL is not a keyword. It's an identifier defined in some standard headers. You can include

#include <cstddef>

To have it in scope, including some other basics, like std::size_t.

error: null was not declared in this scope

You probably want to write:

    Packet() : index(0), content("") { }
Packet(int i, string data) : index(i), content(data) { }

The word null is not reserved by the C++ standard. NULL is a null pointer constant, but is not appropriate as an initializer for int (you might get away with it, but it would be equivalent to writing 0, and it is bad practice to use NULL where you mean 0 or '\0'), and it is not really appropriate to initialize a string with NULL either.

You could even use:

    Packet(int i = 0, string data = "") : index(i), content(data) { }

to have a single constructor with defaulted arguments.

nullptr' was not declared in this scope in GCC 7.5

it complains about ordered comparison between integer and pointer

"Ordered comparison" means comparison with > or < or >= or <=. It makes no sense to compare a pointer with a null pointer constant this way.

so I change the 0 in the comparison to nullptr

This doesn't make the comparison any more meaningful. It makes no sense to compare a pointer with a null pointer constant this way either.

But then I receive an error message that "'nullptr' was not declared in this scope".

This cannot happen with gcc 7.5 unless you

  • compile C rather than C++ or
  • pass -std=c++98 or -std=c++03 somewhere or
  • have a broken installation of gcc.

In any case you probably want to fix the comparison (perhaps change > or < to !=) and only then think of maybe replacing 0 with nullptr.

error: 'null' was not declared in this scope when setting integer to 0 - photon/arduino C++

In this line

Particle.publish("endGame", null, 60, PRIVATE);

you use something called null, and neither you nor the standard declares such a thing.

If this is supposed to pass a Null-Pointer, use

Particle.publish("endGame", nullptr, 60, PRIVATE);

or, if you are pre-C++11 and included an appropriate library,

Particle.publish("endGame", NULL, 60, PRIVATE);

Note that case is important in C++.

New C++11 for loop causes error: ‘begin’ was not declared in this scope using it for an struct with array

Range-based for loops need to have access to the bounds of what you're iterating.

As noted on the relevant cppreference page, there are three ways:

  1. It is an array of known size (which is the case for your dataset1 member)
  2. my_struct::begin() and my_struct::end() are defined
  3. begin(my_struct&) and end(my_struct&) are defined

As for this line:

cout << "Range 2: " << test_data_1.dataset1[1]->range << endl; //Not working

It is because dataset1[1] is not a pointer but a reference, so you don't use -> but . instead.

See a working example on godbolt

sfml compile error: NULL was not declared in this scope

This code does not compile and shows the errors you described:

#include <SFML/Graphics/Image.hpp>
int main()
{
return 0;
}

The output is:

In file included from ./include/SFML/System/Resource.hpp:211:0,
from ./include/SFML/Graphics/Image.hpp:31,
from test.cpp:1:
./include/SFML/System/ResourcePtr.inl: In constructor ‘sf::ResourcePtr< <template-parameter-1-1> >::ResourcePtr()’:
./include/SFML/System/ResourcePtr.inl:31:12: error: ‘NULL’ was not declared in this scope
./include/SFML/System/ResourcePtr.inl: In member function ‘void sf::ResourcePtr< <template-parameter-1-1> >::OnResourceDestroyed()’:
./include/SFML/System/ResourcePtr.inl:148:18: error: ‘NULL’ was not declared in this scope

Luckily the fix is easy, this works:

#include <SFML/System.hpp>
#include <SFML/Graphics/Image.hpp>
int main()
{
return 0;
}

It looks like this works too:

#include <cstddef>
#include <SFML/Graphics/Image.hpp>
int main()
{
return 0;
}

They forgot to include this header somewhere in their code before using NULL. As long as you include it before any of their headers it should work.

As you said yourself, the use of NULL can be a bit confusing, as it is itself a macro expanding either to 0 or (void*)0. The new standard takes care of that by introducing nullptr, which is strongly typed. Changing NULL for nullptr in lines 31 and 148 of ResourcePtr.inl is probably the best way to solve the problem.



Related Topics



Leave a reply



Submit