【问题标题】:Undefined symbols for architecture, tried i386 and other ,,,未定义的架构符号,尝试过 i386 和其他 ,,,
【发布时间】:2012-10-29 19:39:48
【问题描述】:

只是想开始一些 C++ 并创建了这些简单的类:

椭球体.h

#ifndef __Ellipsoid__Ellipsoid__
#define __Ellipsoid__Ellipsoid__

#include <iostream>
#include <cassert>


class Ellipsoid {
private:
    double axisA;
    double flatteningF;

public:
    Ellipsoid() {};
   Ellipsoid(double aIn, double fIn);
    double getAxisA();
    double getFlatteningF();



};

#endif /* defined(__Ellipsoid__Ellipsoid__) */

椭球体.cpp

#include "Ellipsoid.h"


Ellipsoid::Ellipsoid (double aIn, double fIn) : axisA(aIn), flatteningF(fIn) {};

int main() {
    std::cout << "bla";
    Ellipsoid el = Ellipsoid(44.3, 32);
    double test = el.getAxisA();


    return 0;
}

因为您在这里看不到什么特别之处。我在 osx10.8 上使用 xcode。 但是当我运行程序时,我遇到了这个错误: 架构 x86_64 的未定义符号: “Ellipsoid::getAxisA()”,引用自: Ellipsoid.o 中的 _main ld:未找到架构 x86_64 的符号 我真的不知道出了什么问题。尝试将架构设置为 32 位,但这也不起作用

【问题讨论】:

    标签: c++ xcode macos


    【解决方案1】:

    缺少Ellipsoid::getAxisA() 函数的定义。你必须在某个地方定义。现在你只有一个声明,没有定义。定义可能如下所示:

    double Ellipsoid::getAxisA() { return axisA; }
    

    并且会住在 Ellipsoid.cpp 中。

    【讨论】:

    • 当然。嗯,有什么办法可以去掉每个函数开头的 Ellipsoid::?
    • Ellipsoid:: 东西只是你在定义类时需要关心的东西,而不是在使用它的时候。所以应该不会那么麻烦。如果你真的不喜欢它,你可以在类中定义内联函数,但我不喜欢这样,因为它破坏了封装并使编译速度变慢。我还没有对此进行测试,但也许围绕函数定义的namespace Ellipsoid { } 也可以。
    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多