Reputation: 39
I am writing a class for time. Defined my own literals, but gives the error "user-defined literal operator not found".How can I correctly set a variable with a literal? Here is the literal code: literals.hpp
namespace lab1 {
ulli operator"" _d(ulli days);
ulli operator"" _h(ulli hours);
ulli operator"" _m (ulli minutes);
ulli operator"" _s (ulli seconds);
}
literals.cpp
#include "literals.hpp"
ulli operator"" _d(ulli days) {
ulli timeInSeconds;
timeInSeconds = days * 24 * 60 * 60;
return timeInSeconds;
}
....
main.cpp
#include <iostream>
#include "Timespan.hpp"
#include "Time.hpp"
#include "literals.hpp"
using namespace lab1;
int main() {
ulli days = 12_d;
Time Test = Time(days,24,52,32);
std::cout << Test << std::endl;
}
ulli is using ulli = unsigned long long int;
Upvotes: 1
Views: 3029
Reputation: 1143
The issue is you have declared the operator in lab1 scope but defined it in global scope. When you move the definition also to the lab1 namespace it works.
Here is the correct code.
#include <iostream>
using ulli = unsigned long long;
namespace lab1 {
ulli operator"" _d(ulli days);
ulli operator"" _h(ulli hours);
ulli operator"" _m (ulli minutes);
ulli operator"" _s (ulli seconds);
ulli operator"" _d(ulli days) {
ulli timeInSeconds;
timeInSeconds = days * 24 * 60 * 60;
return timeInSeconds;
}
}
using namespace lab1;
int main() {
ulli days = 12_d;
std::cout<<days;
return 0;
}
Upvotes: 1