数组定义:
struct {
unsigned int sblimit;
unsigned char const offsets[30];
} const sbquant_table[5] = {
/* ISO/IEC 11172-3 Table B.2a */
{ 27, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0 } },
/* ISO/IEC 11172-3 Table B.2b */
{ 30, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0 } },
/* ISO/IEC 11172-3 Table B.2c */
{ 8, { 5, 5, 2, 2, 2, 2, 2, 2 } }, /* 2 */
/* ISO/IEC 11172-3 Table B.2d */
{ 12, { 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } }, /* 3 */
/* ISO/IEC 13818-3 Table B.1 */
{ 30, { 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }
};
编译后错误:
c:\libmad\layer12.cpp(223) : error C2440: 'initializing' : cannot convert from 'const int' to 'const struct '
No constructor could take the source type, or constructor overload resolution was ambiguous
c:\libmad\layer12.cpp(223) : error C2552: 'sbquant_table' : non-aggregates cannot be initialized with initializer list
c:\libmad\layer12.cpp(223) : error C2078: too many initializers
c:\libmadl\ayer12.cpp(223) : error C2073: 'sbquant_table' : partially initialized array requires a default constructor
Error executing cl.exe.
编译环境:
Visual C++ 6.0 (SP5)
21 个解决方案
#1
请不要用VC6
d:\>g++ test.cpp
test.cpp:22:2: warning: no newline at end of file
d:\>gcc test.cpp
test.cpp:22:2: warning: no newline at end of file
d:\>
1>------ 已启动生成: 项目: Console, 配置: Debug Win32 ------
1>正在编译...
1>Console.cpp
1>生成日志保存在“file://d:\工程区\VS.NET工程区(9)\Console\Console\Debug\BuildLog.htm”
1>Console - 0 个错误,0 个警告
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
无问题
d:\>g++ test.cpp
test.cpp:22:2: warning: no newline at end of file
d:\>gcc test.cpp
test.cpp:22:2: warning: no newline at end of file
d:\>
1>------ 已启动生成: 项目: Console, 配置: Debug Win32 ------
1>正在编译...
1>Console.cpp
1>生成日志保存在“file://d:\工程区\VS.NET工程区(9)\Console\Console\Debug\BuildLog.htm”
1>Console - 0 个错误,0 个警告
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
无问题
#2
恐怕const位置vc6不认,将结构体和数值的定义分开看看
#3
dev也显示正确
#4
这个项目是用VC6。0开发的,有没有其他的解决方法啊?
#5
写个函数是运行时刻足够早的函数,在里面赋值呗.
#6
楼主把代码移植到vc8.0+版本试一下~~
如果当时的代码编写按照c++标准的话,工程应该只是重新编译下就行,不需要对源码改动
如果当时的代码编写按照c++标准的话,工程应该只是重新编译下就行,不需要对源码改动
#7
struct {
unsigned int sblimit;
unsigned char offsets[30];
} const sbquant_table[5] = {
/* ISO/IEC 11172-3 Table B.2a */
{ 27, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0 } },
/* ISO/IEC 11172-3 Table B.2b */
{ 30, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0 } },
/* ISO/IEC 11172-3 Table B.2c */
{ 8, { 5, 5, 2, 2, 2, 2, 2, 2 } }, /* 2 */
/* ISO/IEC 11172-3 Table B.2d */
{ 12, { 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } }, /* 3 */
/* ISO/IEC 13818-3 Table B.1 */
{ 30, { 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }
};
上面那个去掉const,在VS2008也正常
#8
unsigned char const offsets
由于是const,不能直接改offsets,利用内存偏移...
(char*)&sbquant_table[0]+4 就是sbquant_table[0]的数组成员的第一个元素的位置
由于是const,不能直接改offsets,利用内存偏移...
(char*)&sbquant_table[0]+4 就是sbquant_table[0]的数组成员的第一个元素的位置
#9
=_=
#10
#include<stdio.h>
void main()
{
struct
{
unsigned int sblimit;
unsigned char offsets[30];
} const sbquant_table[5] = {
/* ISO/IEC 11172-3 Table B.2a */
{ 27, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0 } },
/* ISO/IEC 11172-3 Table B.2b */
{ 30, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0 } },
/* ISO/IEC 11172-3 Table B.2c */
{ 8, { 5, 5, 2, 2, 2, 2, 2, 2 } }, /* 2 */
/* ISO/IEC 11172-3 Table B.2d */
{ 12, { 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } }, /* 3 */
/* ISO/IEC 13818-3 Table B.1 */
{ 30, { 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }
};
}
定义offsets[30]为unsigned char 就可以了,无需用const.
void main()
{
struct
{
unsigned int sblimit;
unsigned char offsets[30];
} const sbquant_table[5] = {
/* ISO/IEC 11172-3 Table B.2a */
{ 27, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0 } },
/* ISO/IEC 11172-3 Table B.2b */
{ 30, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0 } },
/* ISO/IEC 11172-3 Table B.2c */
{ 8, { 5, 5, 2, 2, 2, 2, 2, 2 } }, /* 2 */
/* ISO/IEC 11172-3 Table B.2d */
{ 12, { 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } }, /* 3 */
/* ISO/IEC 13818-3 Table B.1 */
{ 30, { 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }
};
}
定义offsets[30]为unsigned char 就可以了,无需用const.
#11
楼上的,还是一样的错误啊, 有啥更好的方法哇?总不会让我一个个负值把,
#12
ding !!
#13
clean下,重新编译..偶在VC6.0下试了下,没问题
#14
老兄,你能不能把你vc6.0的那个工程发给我啊?我这里怎么弄也弄不出来。还是编译不过。
你的具体的编译环境也告诉我一下吧,
mail: dragonfly0611@163.com
谢拉,
#15
10楼的也能过,怎么你的不能过...
#16
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
unsigned int const data1[5] = {27,30,8,12,30};
unsigned char const data[5][30] = {
/* ISO/IEC 11172-3 Table B.2a */
{ 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0 } ,
/* ISO/IEC 11172-3 Table B.2b */
{ 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0 } ,
/* ISO/IEC 11172-3 Table B.2c */
{ 5, 5, 2, 2, 2, 2, 2, 2 } , /* 2 */
/* ISO/IEC 11172-3 Table B.2d */
{ 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } , /* 3 */
/* ISO/IEC 13818-3 Table B.1 */
{ 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
};
static struct tag_unname{
unsigned int sblimit;
unsigned char const offsets[30];
} sbquant_table[5];
void Init()
{
int i;
for (i = 0; i < 5; ++i)
{
*(int*)&sbquant_table[i] = data1[i];
memcpy((char*)&sbquant_table[i]+4, data[i], sizeof(unsigned char)*30);
}
}
int main(int argc, char* argv[])
{
int i, j;
Init();
for (i = 0; i < 5; ++i)
{
printf("%d\t", sbquant_table[i].sblimit);
for (j = 0; j < 30; ++j)
printf("%d ", sbquant_table[i].offsets[j]);
printf("\n");
}
return 0;
}
#17
代码在code::blocks下编译通过了
Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 0 warnings
你的是vc++6.0(sp5)的
是不是打上sp6的补丁试试
Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 0 warnings
你的是vc++6.0(sp5)的
是不是打上sp6的补丁试试
#18
vc6.0 sp6
英文版地址:
http://download.microsoft.com/download/1/9/f/19fe4660-5792-4683-99e0-8d48c22eed74/Vs6sp6.exe
简体中文版地址:
http://download.microsoft.com/download/e/c/9/ec94a5d4-d0cf-4484-8b7a-21802f497309/Vs6sp6.exe
英文版地址:
http://download.microsoft.com/download/1/9/f/19fe4660-5792-4683-99e0-8d48c22eed74/Vs6sp6.exe
简体中文版地址:
http://download.microsoft.com/download/e/c/9/ec94a5d4-d0cf-4484-8b7a-21802f497309/Vs6sp6.exe
#19
我在linux下面,无法帮楼主测试到底是不是补丁的原因了
#20
谢谢各位的帮忙,问题解决了,我打了sp6的patch就好了。不过,最后我还是用了baihacker的方法,谢谢
#21
up 16L
#1
请不要用VC6
d:\>g++ test.cpp
test.cpp:22:2: warning: no newline at end of file
d:\>gcc test.cpp
test.cpp:22:2: warning: no newline at end of file
d:\>
1>------ 已启动生成: 项目: Console, 配置: Debug Win32 ------
1>正在编译...
1>Console.cpp
1>生成日志保存在“file://d:\工程区\VS.NET工程区(9)\Console\Console\Debug\BuildLog.htm”
1>Console - 0 个错误,0 个警告
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
无问题
d:\>g++ test.cpp
test.cpp:22:2: warning: no newline at end of file
d:\>gcc test.cpp
test.cpp:22:2: warning: no newline at end of file
d:\>
1>------ 已启动生成: 项目: Console, 配置: Debug Win32 ------
1>正在编译...
1>Console.cpp
1>生成日志保存在“file://d:\工程区\VS.NET工程区(9)\Console\Console\Debug\BuildLog.htm”
1>Console - 0 个错误,0 个警告
========== 生成: 成功 1 个,失败 0 个,最新 0 个,跳过 0 个 ==========
无问题
#2
恐怕const位置vc6不认,将结构体和数值的定义分开看看
#3
dev也显示正确
#4
这个项目是用VC6。0开发的,有没有其他的解决方法啊?
#5
写个函数是运行时刻足够早的函数,在里面赋值呗.
#6
楼主把代码移植到vc8.0+版本试一下~~
如果当时的代码编写按照c++标准的话,工程应该只是重新编译下就行,不需要对源码改动
如果当时的代码编写按照c++标准的话,工程应该只是重新编译下就行,不需要对源码改动
#7
struct {
unsigned int sblimit;
unsigned char offsets[30];
} const sbquant_table[5] = {
/* ISO/IEC 11172-3 Table B.2a */
{ 27, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0 } },
/* ISO/IEC 11172-3 Table B.2b */
{ 30, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0 } },
/* ISO/IEC 11172-3 Table B.2c */
{ 8, { 5, 5, 2, 2, 2, 2, 2, 2 } }, /* 2 */
/* ISO/IEC 11172-3 Table B.2d */
{ 12, { 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } }, /* 3 */
/* ISO/IEC 13818-3 Table B.1 */
{ 30, { 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }
};
上面那个去掉const,在VS2008也正常
#8
unsigned char const offsets
由于是const,不能直接改offsets,利用内存偏移...
(char*)&sbquant_table[0]+4 就是sbquant_table[0]的数组成员的第一个元素的位置
由于是const,不能直接改offsets,利用内存偏移...
(char*)&sbquant_table[0]+4 就是sbquant_table[0]的数组成员的第一个元素的位置
#9
=_=
#10
#include<stdio.h>
void main()
{
struct
{
unsigned int sblimit;
unsigned char offsets[30];
} const sbquant_table[5] = {
/* ISO/IEC 11172-3 Table B.2a */
{ 27, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0 } },
/* ISO/IEC 11172-3 Table B.2b */
{ 30, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0 } },
/* ISO/IEC 11172-3 Table B.2c */
{ 8, { 5, 5, 2, 2, 2, 2, 2, 2 } }, /* 2 */
/* ISO/IEC 11172-3 Table B.2d */
{ 12, { 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } }, /* 3 */
/* ISO/IEC 13818-3 Table B.1 */
{ 30, { 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }
};
}
定义offsets[30]为unsigned char 就可以了,无需用const.
void main()
{
struct
{
unsigned int sblimit;
unsigned char offsets[30];
} const sbquant_table[5] = {
/* ISO/IEC 11172-3 Table B.2a */
{ 27, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0 } },
/* ISO/IEC 11172-3 Table B.2b */
{ 30, { 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0 } },
/* ISO/IEC 11172-3 Table B.2c */
{ 8, { 5, 5, 2, 2, 2, 2, 2, 2 } }, /* 2 */
/* ISO/IEC 11172-3 Table B.2d */
{ 12, { 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } }, /* 3 */
/* ISO/IEC 13818-3 Table B.1 */
{ 30, { 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } }
};
}
定义offsets[30]为unsigned char 就可以了,无需用const.
#11
楼上的,还是一样的错误啊, 有啥更好的方法哇?总不会让我一个个负值把,
#12
ding !!
#13
clean下,重新编译..偶在VC6.0下试了下,没问题
#14
老兄,你能不能把你vc6.0的那个工程发给我啊?我这里怎么弄也弄不出来。还是编译不过。
你的具体的编译环境也告诉我一下吧,
mail: dragonfly0611@163.com
谢拉,
#15
10楼的也能过,怎么你的不能过...
#16
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
unsigned int const data1[5] = {27,30,8,12,30};
unsigned char const data[5][30] = {
/* ISO/IEC 11172-3 Table B.2a */
{ 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0 } ,
/* ISO/IEC 11172-3 Table B.2b */
{ 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0 } ,
/* ISO/IEC 11172-3 Table B.2c */
{ 5, 5, 2, 2, 2, 2, 2, 2 } , /* 2 */
/* ISO/IEC 11172-3 Table B.2d */
{ 5, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 } , /* 3 */
/* ISO/IEC 13818-3 Table B.1 */
{ 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
};
static struct tag_unname{
unsigned int sblimit;
unsigned char const offsets[30];
} sbquant_table[5];
void Init()
{
int i;
for (i = 0; i < 5; ++i)
{
*(int*)&sbquant_table[i] = data1[i];
memcpy((char*)&sbquant_table[i]+4, data[i], sizeof(unsigned char)*30);
}
}
int main(int argc, char* argv[])
{
int i, j;
Init();
for (i = 0; i < 5; ++i)
{
printf("%d\t", sbquant_table[i].sblimit);
for (j = 0; j < 30; ++j)
printf("%d ", sbquant_table[i].offsets[j]);
printf("\n");
}
return 0;
}
#17
代码在code::blocks下编译通过了
Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 0 warnings
你的是vc++6.0(sp5)的
是不是打上sp6的补丁试试
Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 0 warnings
你的是vc++6.0(sp5)的
是不是打上sp6的补丁试试
#18
vc6.0 sp6
英文版地址:
http://download.microsoft.com/download/1/9/f/19fe4660-5792-4683-99e0-8d48c22eed74/Vs6sp6.exe
简体中文版地址:
http://download.microsoft.com/download/e/c/9/ec94a5d4-d0cf-4484-8b7a-21802f497309/Vs6sp6.exe
英文版地址:
http://download.microsoft.com/download/1/9/f/19fe4660-5792-4683-99e0-8d48c22eed74/Vs6sp6.exe
简体中文版地址:
http://download.microsoft.com/download/e/c/9/ec94a5d4-d0cf-4484-8b7a-21802f497309/Vs6sp6.exe
#19
我在linux下面,无法帮楼主测试到底是不是补丁的原因了
#20
谢谢各位的帮忙,问题解决了,我打了sp6的patch就好了。不过,最后我还是用了baihacker的方法,谢谢
#21
up 16L