digitalmars.D.learn - Problems instantiating template class
- Mek101 (28/28) Apr 06 2019 I'm rewriting from C# a small library of mine to practice with D.
- Nicholas Wilson (16/45) Apr 06 2019 Hmm,
I have a class:
class WeightedRandom(T, W = float) if(isNumeric!W)
{
// Fields
private W[T] _pairs;
// The total sum of all the weights;
private W _probabilities;
/// Code...
}
And when I try to instantiate an object in a unittest
unittest
{
auto wrnd = new WeightedRandom!char();
wrnd.normalizeAt(120.55);
}
Compilation fails with the following error:
source/utils/weightedRandom.d(25,18): Error: cannot pass type
char as a function argument
source/utils/weightedRandom.d(90,18): Error: template instance
`utils.weightedrandom.WeightedRandom!(char, float)` error
instantiating
/usr/bin/dmd failed with exit code 1.
Same exact error with:
WeightedRandom!(char)();
WeightedRandom!(string, float)();
It seems like dmd thinks I'm calling a function while I'm trying
to instantiate the object.
Apr 06 2019
On Saturday, 6 April 2019 at 17:30:45 UTC, Mek101 wrote:
D.
I have a class:
class WeightedRandom(T, W = float) if(isNumeric!W)
{
// Fields
private W[T] _pairs;
// The total sum of all the weights;
private W _probabilities;
/// Code...
}
And when I try to instantiate an object in a unittest
unittest
{
auto wrnd = new WeightedRandom!char();
wrnd.normalizeAt(120.55);
}
Compilation fails with the following error:
source/utils/weightedRandom.d(25,18): Error: cannot pass type
char as a function argument
source/utils/weightedRandom.d(90,18): Error: template instance
`utils.weightedrandom.WeightedRandom!(char, float)` error
instantiating
/usr/bin/dmd failed with exit code 1.
Same exact error with:
WeightedRandom!(char)();
WeightedRandom!(string, float)();
It seems like dmd thinks I'm calling a function while I'm
trying to instantiate the object.
Hmm,
import std.traits;
class WeightedRandom(T, W = float) if(isNumeric!W)
{
// Fields
private W[T] _pairs;
// The total sum of all the weights;
private W _probabilities;
/// Code...
}
void main()
{
auto wrnd = new WeightedRandom!char();
}
works for me: https://run.dlang.io/is/CjSubj
Apr 06 2019
On Saturday, 6 April 2019 at 17:44:25 UTC, Nicholas Wilson wrote:
Hmm,
import std.traits;
class WeightedRandom(T, W = float) if(isNumeric!W)
{
// Fields
private W[T] _pairs;
// The total sum of all the weights;
private W _probabilities;
/// Code...
}
void main()
{
auto wrnd = new WeightedRandom!char();
}
works for me: https://run.dlang.io/is/CjSubj
My bad. It seems like an invisible character sent the complier
crazy. I re-wrote the unittest and now it works...
Weird...
Apr 06 2019
On Saturday, 6 April 2019 at 18:08:31 UTC, Mek101 wrote:On Saturday, 6 April 2019 at 17:44:25 UTC, Nicholas Wilson wrote:No, it's me being wrong again. Compiling it with 'dub test' produces the error, even in the main() function.Hmm, import std.traits; class WeightedRandom(T, W = float) if(isNumeric!W) { // Fields private W[T] _pairs; // The total sum of all the weights; private W _probabilities; /// Code... } void main() { auto wrnd = new WeightedRandom!char(); } works for me: https://run.dlang.io/is/CjSubjMy bad. It seems like an invisible character sent the complier crazy. I re-wrote the unittest and now it works... Weird...
Apr 06 2019








Mek101 <anEmailAddress mail.somewhere>