Write that in CPP class file - visual-c++

bool guess( string aNumberString );
i got this in header file in x.h but how do you define that in the class .
I don't know How to do that !!
By the way I am using c++ !!!

bool x::guess(string aNumberString)
{
// Defination
};

Related

std::list<int> predicate call to function: Error C3867 function call missing argument list

I am using std::list's predicate to update the list based on predicate. But calling in the OnInitDialog() throws compilation error. My code is as follows:
The below is .h:
class CDlgWindow : public CDialog
{
private:
bool single_digit (const int &value);
int _days;
}
The below is .cpp:
CDlgWindow::CDlgWindow(CWnd* pParent, CString strInfo, int days) //ctor
{
_days = days;
//_strInfo = strInfo
}
bool CDlgWindow::single_digit(const int& value)
{
return (value >= _days);
}
BOOL CDlgWindow::OnInitDialog()
{
CDialog::OnInitDialog();
CenterWindow();
.
.
.
int numArr[] = {10,20,30,40};
int size = sizeof(numArr)/sizeof(numArr[0]);
std::list<int> numList (numArr, numArr+size);
numList.remove_if(single_digit); //Error C3867 here!
.
.
}
Complete error message:
Error C3867 function call missing argument list, use '&CDlgWindow::single_digit' to create a pointer to member.
I am trying to understand the functors concept. As I checked in C++11, we have lambdas for easier implementation. Please guide me to understand more on this issue. Thanks!
std::list's remove_if member needs a unary predicate (p) that operates on values (v). The expression p(v) must be valid. Which it isn't if p is a non-static class member (see repro).
There are two options:
Make the predicate (single_digit) a static class member:
class CDlgWindow : public CDialog
{
private:
static bool single_digit (const int &value);
// ...
}
Make the predicate a free function:
bool single_digit(int const& value) {
static int days_ = ...;
return (value >= days_);
}
If you go with option 1 you will have to make _days static as well, since a static member function cannot access non-static instance data. If _days is a compile-time constant, make sure to mark it const as well. That'll open up some compiler optimizations.
This is all hoping that things haven't significantly changed between C++98 and C++11. It's hard to find a C++98 compiler to verify this.

Possible to make custom class named "Map", and still reference the Haxe "Map" class?

Is it possible to make a class called Map:
// src/test/Map.hx
package test;
class Map {
public function new ( a : Int, b : Int : c : Int ) {
trace( a + b + c );
}
}
And then somehow access both this new Map class AND the original Haxe Map construct in Foo.hx?
// src/test/Foo.hx
package test;
class Foo {
var map1 : test.Map = new test.Map( 1, 2, 3 );
var map2 : Map<Int, String> = [ 0 => "Hello" ];
}
This doesn't work, because the map2 type is automatically resolving to test.Map (not the Haxe one) because Foo.hx is part of the test package which contains the new Map class.
If the Haxe Map construct was part of a package, this would be easy (could just say package_name.Map). However, it has no package. So is there no way to access both?
With Haxe 4 you will be able to use haxe.ds.Map.
Meanwhile, you should be able to access haxe's Map with std.Map.

Create function to read only from file by [] operator c++

I was asked to create new class that adds certain features to fstream in c++.
Two of the features are [] operator that write to file and and second one is read only from file.
My header file of the class lock like that :
class RandomAccessFile{
private:
const ofstream writheFile; //Object for Writing:
const ifstream readFile; //Object for reading:
public:
RandomAccessFile(string fileName):writheFile(fileName), readFile(fileName){};
inline const char& operator[](int num) const ; // read only from file by random access
// some other functionality....
};
I try to implement the read only operator this way:
const char& RandomAccessFile::operator[](int num) const {
return readFile.get();
}
but I got the error:
no matching member function for call to 'get'
Wen I try the same this without the const in declaration it's works fine
what should I do to corrects this problem?
thanks.

Why is the struct unknown at compiletime in the code?

I was wondering how I could change the code below such the bmBc is computed at compile time . The one below works for runtime but it is not ideal since I need to know the bmBc table at compile-time . I could appreciate advice on how I could improve on this.
import std.conv:to;
import std.stdio;
int [string] bmBc;
immutable string pattern = "GCAGAGAG";
const int size = to!int(pattern.length);
struct king {
void calculatebmBc(int i)()
{
static if ( i < size -1 )
bmBc[to!string(pattern[i])]=to!int(size-i-1);
// bmBc[pattern[i]] ~= i-1;
calculatebmBc!(i+1)();
}
void calculatebmBc(int i: size-1)() {
}
}
void main(){
king myKing;
const int start = 0;
myKing.calculatebmBc!(start)();
//1. enum bmBcTable = bmBc;
}
The variables bmBc and bmh can't be read at compile time because you define them as regular runtime variables.
You need to define them as enums, or possibly immutable, to read them at compile time, but that also means that you cannot modify them after initialization. You need to refactor your code to return values instead of using out parameters.
Alternatively, you can initialize them at runtime inside of a module constructor.

ambiguous copy constructors vc 2008

I'm trying to recompile older code in latest Visual Studio (2008) and code that worked previously now fails to compile. One of the problems is due to overloaded operators for my class. below there is simplified class to demonstrate the problem. If I remove casting operators for int and char* then it works fine. So one of the ways to fix my issue is to replace them with procedures to_char and to_int and use them instead but it will require a lot of changes in the code (that class is heavily used). There must be some better, smarter way to fix it. any help is greatly appreciated :-)
class test
{
public:
test();
test(char* s2);
test(int num);
test(test &source);
~test();
operator char*();
operator int();
};
test::test() {
}
test::test(char* s2) {
}
test::test(int num) {
}
test::test(test &source) {
}
test::operator char*() {
}
test::operator int() {
}
test test_proc() {
test aa;
return aa;
}
int test_proc2(test aa)
{
return 0;
}
int main()
{
test_proc2(test_proc());
}
//test.cpp(60) : error C2664: 'test_proc2' : cannot convert parameter 1 from 'test' to 'test'
// Cannot copy construct class 'test' due to ambiguous copy constructors or no available copy constructor
Try changing
test(test &source);
to
test(const test &source);
The issue is that the test_proc call returns a temporary test object, which can be passed to a function that accepts a const reference, but not a plain reference.

Resources