r****t 发帖数: 10904 | 1 把 error message 也贴一下:
g++ -Wall main.o -o main
main.o: In function `void M::Location::read >(char
const*, SArray::Array&) const':
main.cxx:(.text._ZNK1M8Location4readIN6SArray5ArrayIfLj3EEEEEvPKcRT_[void M:
3u>&) const]+0x1b): undefined reference to `void M::read
float, 3u> >(M::Location const&, char const*, SArray::Array&)'
main.o: In function `void M::read_matrix >(char
const*, char const*, SArray::Array |
|
s*i 发帖数: 5025 | 2 try this:
//in C#, make a sbyte array, say
//sbyte[] sArray = .....
unsafe
{
fixed(byte *fileName=sArray) className.open(fileName);
}
This should work. Remember to enable 'unsafe blocks" in Visual Studio to
compile correctly.
Working with sbyte is actually not very convinient. If you can recompile your
C++ with "/J" (default char unsigned: Yes), your expected input becomes
"byte*" instead of "sbyte*". This way, you can try this:
//using System.Text
.....
ASCIIEncoding encoding=new ASCIIEncod |
|
K*****n 发帖数: 65 | 3 change
Shape* sarray[] = {new Circle, new Circle, new Circle};
to
Shape* sarray[] = {new Circle(), new Circle(), new Circle()};
VC++ 6.0 compiles without errors. |
|
i**p 发帖数: 902 | 4 delete[] does not work here.
Do I have to delete the 3 objects one by one?
Circle *sarray[] = {new Circle, new Circle, new Circle};
delete[] sarray; // core dump |
|
n**d 发帖数: 9764 | 5 Shape* sarray[] = {new Circle, new Circle, new Circle};
error C2143: syntax error : missing ';' before '}'
error C2059: syntax error : ';'
The following is the full code.
#include
class Shape {
public:
virtual void draw() = 0;
virtual void erase() = 0;
virtual ~Shape() {}
};
class Circle : public Shape {
public:
Circle() {}
~Circle() { std::cout << "Circle::~Circle\n"; }
void draw() { std::cout << "Circle::draw\n";}
void erase() { std::cout << "Circle::eras |
|
t****t 发帖数: 6806 | 6 除了这个之外,
把
template
void
read(const Location &location, const char *dataset_name, SArray::
Array & arr) {} // this function is not found
移到
class Location
上面
先声明再使用!先声明再使用!先声明再使用!
先声明再使用!先声明再使用!先声明再使用!
先声明再使用!先声明再使用!先声明再使用!
先声明再使用!先声明再使用!先声明再使用!
先声明再使用!先声明再使用!先声明再使用!
先声明再使用!先声明再使用!先声明再使用!
先声明再使用!先声明再使用!先声明再使用!
先声明再使用!先声明再使用!先声明再使用!
先声明再使用!先声明再使用!先声明再使用!
先声明再使用!先声明再使用!先声明再使用!
//重复100遍 |
|
r****t 发帖数: 10904 | 7 那我完了,写这 code 的人明显是想利用这个特性,
// this function is not found
template
void read(const Location &location, const char *dataset_name,
SArray::Array & arr) {}
是 intend to be written later 的。我试试在头文件里面先 include 这部分看看。
。。得到下午才能试了。 |
|
r****t 发帖数: 10904 | 8 template的声明和定义分开,是不是说像下面这样? linking 好像没出错。我没有用
explicit instantiation 吧? 头文件有点多,include 挺乱,不好保证 reference 到以前有定义。。
namespace SArray {
template class Array;
template
class Array
{
public:
Array() {}
};
}
namespace M {
class Location;
// first arg has to be "const" Location &
template
void read(const Location &, const char * dataset_name, T & matrix);
cl |
|
z***e 发帖数: 5393 | 9 嗯,我觉得也是。
lz 的两个read() function是完全不同的:
template
void read(const Location &, const char * dataset_name, T & matrix);
//这个declare了,但是下面并不是definition. 第三个参数类型都不同。
template
void
read(const Location &location, const char *dataset_name, SArray::
Array & arr) {} // this function is not found
}
然后lz:
Array arr;
M::read_matrix("file", "location", arr);
arr是Array---这个就是你的type,相当于:
void read(const Location &, const char * dataset_name, Array &
mat |
|