我观察到错误"warning C4090:'function‘:different 'const’限定符“,因为下面的代码行。我正在经历其他类似的问题,所以我理解(不是100%)是因为
--> EmployeeList的qsort中的const char* EmployeeList[]和我的声明
#define Elements(array) (sizeof(array)/sizeof((array)[0]))
const char *EmployeeList[] =
{
"Larry Page", "Sergy Brin", "Sundar Pichai", "Merrisa Mayer"
};
// called from main
SortEmployee(EmployeeList, Elements(EmployeeList));
int Compare(const void *elemA, const void *elemB)
{
...
}
void SortEmployee(const char *EmployeeList[], size_t EmployeeCount)
{
qsort(EmployeeList, EmployeeCount, sizeof(EmployeeList[0]), Compare);
}然而,我无法解决它-任何指针如何做它的字符串数组。
发布于 2015-08-13 04:12:26
问题是qsort没有将其参数声明为const,而您的代码却声明了。EmployeeList指出,这意味着qsort (在理论上)可能会更改数据。因此,编译器报告了这个错误。
下面是官方的例子:https://msdn.microsoft.com/en-us/library/k77bkb8d.aspx
然而,这里有一个简单的版本来演示我的想法:
void foo(char* a) {
*a = '1'; // I got pointer to char, and changed this char!
}
int main() {
const char *a = "A"; // I have "CONSTANT POINTER": it points to CONSTANT memory, that CAN NOT be changed (by the way, string constants can't in many environments).
foo(a); // I pass it to my function, that will change it.
return 0;
}您的编译器将a存储在只读内存中(它可以,因为我们告诉它“这是一个指向只读数据的指针”)。然后修改它(在main函数中)。可能会有不好的事情发生。所以,编译器会警告你“嘿,你把一个指向常量数据的指针传给了某个函数,这个函数不知道这个数据是常量的,可能会改变它。”
https://stackoverflow.com/questions/31973854
复制相似问题