How to Resolve a Name Conflict in C++?
Last Updated :
11 Mar, 2024
In C++, naming conflict occurs when two identifiers in the same scope have the same name and the compiler cannot infer which identifier to refer to when it is mentioned in the program.
In this article, we will discuss what are name conflicts, what are its causes, and how to resolve the name conflict in C++.
Name Conflict Error in C++
As discussed in the introduction, the name conflict occurs when two or more identifiers have the same name in the same scope.
For example, look at the following code snippet:
C++
#include <iostream>
using namespace std;
int main()
{
int x = 10;
double x = 20.5;
return 0;
}
|
Output
main.cpp: In function ‘int main()’:
main.cpp:10:12: error: conflicting declaration ‘double x’
10 | double x = 20.5;
| ^
main.cpp:7:9: note: previous declaration as ‘int x’
7 | int x = 10;
| ^
Cases of Name Conflict Errors in C++
Above is not the only case of this error, it can occurs in many other cases. Below are some common cases of this error:
- Global and Local Variables with the Same Name
- Function Overloading with Same Parameter Types
- Same Names in Different Namespaces
- Same Names in Class and Derived Class
- Same Name of Function Object(Functor) and Function
How to Resolve Name Conflict Error in C++
We can easily revolve the name conflict error by renaming the identifier which is causing it. But if you really need to use the same name, here are some other methods to do that:
- Using Namespaces
- Using Scope Resolution Operator
1. Resolve Name Conflict Error Using Namespace
Namespace feature was introduced in C++ exactly for resolving the name conflicts. This feature provide a separate space of each idenfier with same name and we can access them using its namespace.
Example
C++
#include <iostream>
#include <string>
namespace my_namespace1 {
class Student {
public :
std::string name;
int age;
Student(std::string name, int age)
: name(name)
, age(age)
{
}
void display()
{
std::cout << "Name: " << name << "\nAge: " << age
<< std::endl;
}
};
}
namespace my_namespace2 {
class Student {
public :
std::string name;
int age;
int roll;
Student(std::string name, int age, int roll)
: name(name)
, age(age)
, roll(roll)
{
}
void display()
{
std::cout << "Name: " << name << "\nAge: " << age
<< "\nRoll: " << roll << std::endl;
}
};
}
int main()
{
std::cout << "Student 1 Details: " << std::endl;
my_namespace1::Student s1("John", 25);
s1.display();
std::cout << "\nStudent 2 Details: " << std::endl;
my_namespace2::Student s2("Ravi", 30, 25);
s2.display();
return 0;
}
|
Output
Student 1 Details:
Name: John
Age: 25
Student 2 Details:
Name: Ravi
Age: 30
Roll: 25
2. Resolve Name Conflict Error Using Scope Resolution Operator
This method is used to resolve the name conflict in the case where the local variable and global variable have same name. We just access the global variable using scope resolution operator.
Example
C++
#include <iostream>
int x = 10;
void func()
{
int x = 20;
std::cout << "Local x: " << x << std::endl;
std::cout << "Global x: " << ::x << std::endl;
}
int main()
{
func();
return 0;
}
|
Output
Local x: 20
Global x: 10
Share your thoughts in the comments
Please Login to comment...