• 全部
  • 系统维护与使用
  • 应用程序开发
  • 内核源代码
  • 驱动程序开发
  • CPU和硬件区
  • UNIX文化
  • Solaris
  • Power Linux
  • 问答

大家来看看,为什么我的这个vector向量定义在VC下可以运行,在Linux下编译通不过?

B2China 2004-08-31 07:00:05
#include <map>
#include <stdio.h>

typedef struct mystruct
{
int x;
int y;
}MyStruct;

void main()
{

vector<MyStruct *> str;
mystruct *t;
str.at(0) = t;
}
...全文
107 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Xeroo 2004-09-01
templates can be used only in C++ not C
so use g++ instead of gcc
回复
yanghuajia 2004-09-01
编译命令恐怕是原因
#include <vector>
using namespace std;

typedef struct mystruct
{
int x;
int y;
}MyStruct;

int main()
{

vector<MyStruct *> str;
mystruct *t = new MyStruct();
t->x = 3;
t->y = 4;

str.at(0) = t;
return 0;
}

g++ vector.cpp -Wall -g3 -o v

gcc vector.cpp -Wall -g3 -o v
/tmp/ccNLSFCp.o(.text+0x6d): In function `main':
/home/kenneth/test/vector.cpp:14: undefined reference to `operator new(unsigned)'
/tmp/ccNLSFCp.o(.text+0x9a):/home/kenneth/test/vector.cpp:14: undefined reference to `operator delete(void*)'
/tmp/ccNLSFCp.o(.gnu.linkonce.t._ZNKSt6vectorIP8mystructSaIS1_EE14_M_range_checkEj+0x22): In function `std::vector<mystruct*, std::allocator<mystruct*> >::_M_range_check(unsigned) const':
/usr/include/c++/3.2.2/bits/stl_construct.h:143: undefined reference to `std::__throw_out_of_range(char const*)'
/tmp/ccNLSFCp.o(.gnu.linkonce.t._ZNSt14__simple_allocIP8mystructSt24__default_alloc_templateILb1ELi0EEE10deallocateEPS1_j+0x1a): In function `std::__simple_alloc<mystruct*, std::__default_alloc_template<(bool)1, (int)0> >::deallocate(mystruct**, unsigned)':
/usr/include/c++/3.2.2/bits/stl_vector.h:304: undefined reference to `std::__default_alloc_template<(bool)1, (int)0>::deallocate(void*, unsigned)'
/tmp/ccNLSFCp.o(.eh_frame+0x12):/home/kenneth/test/vector.cpp:13: undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
回复
ZHENG017 2004-09-01
str.push_back(t);
回复
B2China 2004-09-01
up 一下。
回复
B2China 2004-08-31
哈哈,我终于找到原因啦!
WIN32 平台和Linux平台下:对于vector类型的变量的引用是不同的。
因此对于vector类型的变量的引用,必须分别对待。

#include <vector>
using namespace std;

typedef struct mystruct
{
int x;
int y;
}MyStruct;

void main()
{

vector<MyStruct *> str;
mystruct *t;
t->x = 3;
t->y = 4;

// 这里判断是WIN32平台还是Linux平台
#ifdef _WIN32
str.at(0) = t;
#else
str[0] = t;
#endif

}
回复
yanghuajia 2004-08-31
OS is redhat 8.0?
回复
B2China 2004-08-31
晕,我正在修改我的问题啊,怎么就已经提交了呢?(当时没有及时取消)
所以: Xeroo(别一个一个字母的念了,念zero!) ,
你看到的只是我准备提问的一个草稿啊!


好,上面的都是题外话了。

完整的程序是这样的:

#include <vector>
using namespace std;

typedef struct mystruct
{
int x;
int y;
}MyStruct;

void main()
{

vector<MyStruct *> str;
mystruct *t;
t->x = 3;
t->y = 4;
str.at(0) = t;
}

用VC在Win32环境编译通过,但是在Linux下调试,系统提示错误:
test.c: In function `int main (...)':
test.c:35: no matching function for call to `vector<mystruct *,
allocator<mystruct *> >::at (int)'
回复
yanghuajia 2004-08-31
hai
回复
B2China 2004-08-31
在Linux下的编译错误是:

test.c: In function `int main (...)':
test.c:35: no matching function for call to `vector<mystruct *,
allocator<mystruct *> >::at (int)'
回复
Xeroo 2004-08-31
首先 vector应该#include <vector>
其次 记得using namespace std;
第三 void main应为int main
最后 你系统的学过C++ STL么?
回复
发帖
Linux/Unix社区
创建于2007-08-27

2.0w+

社区成员

Linux/Unix社区 应用程序开发区
申请成为版主
帖子事件
创建了帖子
2004-08-31 07:00
社区公告
暂无公告