以下は単にコンパイルされず、修正できません。良い魂がこの例を修正する方法を理解してくれることを願っています.
ありがとう
私はコンパイルしようとします:
# make
g++ -c -o client.o client.cpp
client.cpp: In function `int main()':
client.cpp:7: error: missing template arguments before "t"
client.cpp:7: error: expected `;' before "t"
client.cpp:8: error: `t' undeclared (first use this function)
client.cpp:8: error: (Each undeclared identifier is reported only once for each function it appears in.)
<builtin>: recipe for target `client.o' failed
make: *** [client.o] Error 1
client.cpp - メイン
#include<stdio.h>
#include"Test.h"
#include"Other.h"
int main() {
Test<Other> t = Test<Other>(&Other::printOther);
t.execute();
return 0;
}
Test.h
#ifndef TEST_H
#define TEST_H
#include"Other.h"
template<typename T> class Test {
public:
Test();
Test(void(T::*memfunc)());
void execute();
private:
void(T::*memfunc)(void*);
};
#endif
Test.cpp
#include<stdio.h>
#include"Test.h"
#include"Other.h"
Test::Test() {
}
Test::Test(void(T::*memfunc)()) {
this->memfunc= memfunc;
}
void Test::execute() {
Other other;
(other.*memfunc)();
}
その他.h
#ifndef OTHER_H
#define OTHER_H
class Other {
public:
Other();
void printOther();
};
#endif
その他.cpp
#include<stdio.h>
#include"Other.h"
Other::Other() {
}
void Other::printOther() {
printf("Other!!\n");
}
Makefile
all: main
main: client.o Test.o Other.o
g++ -o main $^
clean:
rm *.o
run:
./main.exe
Makefile を使用すると、簡単にコンパイルできます。