代码之家  ›  专栏  ›  技术社区  ›  Jordan

在VisualStudio和XCODE中使用C++运算符重载时出错

  •  1
  • Jordan  · 技术社区  · 16 年前

    我正在为类的C++赋值工作,希望我重载“& gt;&燃气轮机接线员。我在visualstudio2005和xcode3.2.2中都遇到了链接错误。C++代码被分成几个文件。原型存储在overload.h中,实现存储在overload.cpp中,以及 main() 在overloadtester.cpp中(尽管由于错误,我还不能将与这个新的重载运算符相关的任何内容放到main中)。下面是我在开始获取错误之前添加的代码(如下所列)

    // overload.h  
    // Class Name OverloadClass
    #ifndef _OverloadClass_H
    #define _OverloadClass_H
    #include < string >  
    using namespace std ;
    class OverloadClass
    {
    public:
        // Constructors and methods
    private:
        x_;
        y_;
    };
    istream& operator>> (istream& in, OverloadClass &p);
    #endif
    
    
    
    // overload.cpp
    #include < iostream >
    #include < string >
    #include < sstream >
    #include < istream >  
    extern "C"
    {
    #include "DUPoint.h"
    }  
    using namespace std ;  
    
    void OverloadClass::input()
    {
        char leftParen;
        char comma ;
        cin >> leftParen >> x_ >> comma;
    
        char rightParen;
        cin >> y_ >> rightParen;
    }
    
    
    
    // Constructor and method implementations  
    istream& operator>> (istream& in, OverloadClass &p)
    { 
        p.input();
        return in;
    }
    

    Link ./OverloadDirectory   
    Undefined symbols: "operator>>(std:basic_istream >&, OverloadClass&)" referenced from: _main in overloadtester.o 
    ld: symbol(s) not found collect2: ld returned 1 exit status
    

    我没有访问计算机与VS在这个时候希望当我这样做,我可以张贴的错误,我从运行该IDE的代码。

    根据@Mark的要求编辑了更多细节
    为响应@sbi关于input()更多信息的请求而编辑

    4 回复  |  直到 14 年前
        1
  •  1
  •   David Rodríguez - dribeas    16 年前

    未定义符号 void f( int & ); 但你要实施 void f( const int & ) {} ).

    g++ -o exe input1.cpp input2.cpp input3.cpp ...

        2
  •  1
  •   Adam Rosenfield    16 年前

    你在overload.cpp中没有正确链接。确保在这两种情况下,overload.cpp都是项目文件的一方。

        3
  •  0
  •   Puppy    16 年前

    此外,名称必须完全限定。也就是说,如果您有任何名称空间/类静态成员,那么在定义成员的实现时,它们必须应用完整的定义。

        4
  •  0
  •   R Samuel Klatchko    16 年前

    您没有正确地将文件添加到项目中,因此编译器没有生成该文件,而链接器也没有将其链接进来。

    我可以告诉你的原因是你发布了无效的代码,无法编译。如果你把它添加到你的项目中,编译器就会失败,你永远不会进入链接步骤。

    Project Add Existing Item...