跳转到内容

GCC 调试/g++/警告

来自维基教科书,开放的书籍,开放的世界

友元声明'FUNCTION'声明了一个非模板函数

[编辑 | 编辑源代码]
  • 在 GCC 版本 4.5.1 中发现的消息
  • 通常与消息配对
注意: (如果这不是您的本意,请确保函数模板已声明,并在此处在函数名称后添加 <>)
template <typename T>
class Foo {
public:
   T data;
   friend void Bar(Foo<T> &);
};

template <typename T> void Bar(Foo<T> &f) {
   cout << f.data << endl;
}

可能的修复?

template <typename TT> void Bar(TT &);

template <typename T>
class Foo {
public:
   T data;
   friend void Bar<>(Foo<T> &);
};

template <typename TT> void Bar(TT &f) {
   cout << f.data << endl;
}

ISO C++ 认为这些是模棱两可的

[编辑 | 编辑源代码]

ISO C++ 认为这些是模棱两可的,即使第一个的最差转换比第二个的最差转换更好

  • 在 GCC 版本 ? 中发现的消息
  • 可能是自定义定义的类型转换干扰了类定义中的另一个转换

多字符字符常量

[编辑 | 编辑源代码]
  • 在 GCC 版本 4.4.3, 4.5.1 中发现的消息
  • 有时与警告配对:"隐式常量转换溢出"
  • 可能是由于在字符赋值中使用正斜杠而不是反斜杠造成的。
char mrChar = '/0';  // instead of: char mrChar = '\0';

需要非空参数,但传入空参数

[编辑 | 编辑源代码]
  • 在 GCC 版本 ? 中发现的消息
  • 您正在向字符串函数传递一个空参数
strcpy(mrChar, '\0'); // won't work, null argument ('\0') supplied
strcpy(mrChar, ""); // will work?
华夏公益教科书