- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 C++ 的新手,所以也许我做错了什么,但我无法弄清楚它是什么。
我对数据结构类的分配是实现以下头文件:
#ifndef __CS20A__Test__
#define __CS20A__Test__
#include <stdio.h>
namespace cs20a
{
class ThreeDPoint
{
public:
ThreeDPoint(int x, int y, int z);
double Distance() const;
friend bool operator ==(const ThreeDPoint &pt1, const ThreeDPoint &pt2);
friend bool operator !=(const ThreeDPoint &pt1, const ThreeDPoint &pt2);
friend ThreeDPoint operator +(const ThreeDPoint& pt1, const ThreeDPoint& pt2);
friend ThreeDPoint operator -(const ThreeDPoint& pt1, const ThreeDPoint& pt2);
//dot product
friend int operator *(const ThreeDPoint& pt1, const ThreeDPoint& pt2);
int getX() const;
int getY() const;
int getZ() const;
private:
int x;
int y;
int z;
};
}
#endif /* defined(__CS20A__Test__) */
这是我的实现: #include "ThreeDPoint.h" #包括 #包括
using namespace cs20a;
ThreeDPoint::ThreeDPoint(int x, int y, int z)
{
this->x = x;
this->y = y;
this->z = z;
}
double ThreeDPoint::Distance() const
{
return sqrt(pow(x, 2) + pow(y, 2) + pow(z, 2));
}
bool operator== (ThreeDPoint &pt1, ThreeDPoint &pt2)
{
return ((pt1.getX() == pt2.getX()) && (pt1.getY() == pt2.getY()) && (pt1.getZ() == pt2.getZ()));
}
bool operator !=(const ThreeDPoint &pt1, const ThreeDPoint &pt2)
{
return !(pt1.getX() == pt2.getX() && pt1.getY() == pt2.getY() && pt1.getZ() == pt2.getZ());
}
ThreeDPoint operator +(const ThreeDPoint& pt1, const ThreeDPoint& pt2)
{
return ThreeDPoint(pt1.getX() + pt2.getX(), pt1.getY() + pt2.getY(), pt1.getZ() + pt2.getZ());
}
ThreeDPoint operator -(const ThreeDPoint& pt1, const ThreeDPoint& pt2)
{
return ThreeDPoint(pt1.getX() - pt2.getX(), pt1.getY() - pt2.getY(), pt1.getZ() - pt2.getZ());
}
int operator *(const ThreeDPoint& pt1, const ThreeDPoint& pt2)
{
return pt1.getX() * pt2.getX() + pt1.getY() * pt2.getY() + pt1.getZ() * pt2.getZ();
}
int ThreeDPoint::getX() const {
return x;
}
int ThreeDPoint::getY() const {
return y;
}
int ThreeDPoint::getZ() const {
return z;
}
这两个文件本身编译得很好,但是当我添加一个驱动程序时
#include <iostream>
#include "ThreeDPoint.h"
int main(int argc, const char * argv[]) {
cs20a::ThreeDPoint pt1(1,2,3);
cs20a::ThreeDPoint pt2(1,2,3);
// insert code here...
std::cout << (pt1 == pt2);
return 0;
}
或任何具有 ThreeDPoint == ThreeDPoint 或 ThreeDPoint + ThreeDPoint 的驱动程序,当我尝试构建它时,出现此错误:
Ld /Users/jaredjensen/Library/Developer/Xcode/DerivedData/CS20A-fztpdusrphrftebtzmkhjpjcduym/Build/Products/Debug/CS20A normal x86_64
cd "/Users/jaredjensen/Google Drive/XCode/CS20A"
export MACOSX_DEPLOYMENT_TARGET=10.9 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk -L/Users/jaredjensen/Library/Developer/Xcode/DerivedData/CS20A-fztpdusrphrftebtzmkhjpjcduym/Build/Products/Debug -F/Users/jaredjensen/Library/Developer/Xcode/DerivedData/CS20A-fztpdusrphrftebtzmkhjpjcduym/Build/Products/Debug -filelist /Users/jaredjensen/Library/Developer/Xcode/DerivedData/CS20A-fztpdusrphrftebtzmkhjpjcduym/Build/Intermediates/CS20A.build/Debug/CS20A.build/Objects-normal/x86_64/CS20A.LinkFileList -mmacosx-version-min=10.9 -stdlib=libc++ -Xlinker -dependency_info -Xlinker /Users/jaredjensen/Library/Developer/Xcode/DerivedData/CS20A-fztpdusrphrftebtzmkhjpjcduym/Build/Intermediates/CS20A.build/Debug/CS20A.build/Objects-normal/x86_64/CS20A_dependency_info.dat -o /Users/jaredjensen/Library/Developer/Xcode/DerivedData/CS20A-fztpdusrphrftebtzmkhjpjcduym/Build/Products/Debug/CS20A
Undefined symbols for architecture x86_64:
"cs20a::operator==(cs20a::ThreeDPoint const&, cs20a::ThreeDPoint const&)", referenced from:
_main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我已经尝试了所有方法,但无法修复此错误。只有当我让运算符(operator)成为 friend 功能时才会发生这种情况。如果我让他们成为成员,并删除其中一个参数,它就可以正常工作。我做错了什么吗?
最佳答案
你忘记了 cpp
文件中的 ThreeDPoint::before 运算符,并使用二元运算符而不是 friend
/*.cpp add ThreaDproint before operator*/
bool ThreeDPoint::operator== (ThreeDPoint const & pt2)
{
return ((this->x == pt2.getX()) && (this->y == pt2.getY()) && (this->z == pt2.getZ()));
}
bool ThreeDPoint::operator !=(const ThreeDPoint &pt2)
{
return !(this->x == pt2.getX() && this->y == pt2.getY() && this->z == pt2.getZ());
/* here you can do this
return !(this->operator==(pt2)); */
}
/* .h change friend for binary operator*/
bool operator ==(const ThreeDPoint &pt2);
bool operator !=(const ThreeDPoint &pt2);
编辑:强制使用好友关键字
/* add cs20a:: before operator== */
bool cs20a::operator==(const ThreeDPoint &pt1, const ThreeDPoint &pt2)
{
return (pt1.x == pt2.x && pt1.y == pt2.y && pt1.z == pt2.z);
}
祝你好运:)
关于c++ - Apple Mach-O Linker (Id) 在 C++ 中创建运算符友元函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31091597/
我正在尝试手写 Mach-O 可执行文件。加载命令共有三个: LC_SEGMENT_64正在加载__PAGEZERO LC_SEGMENT_64 加载 __TEXT,带有单个 __text 部分 LC
从 objc 源代码我们可以看到 SEL 被定义为 typedef struct objc_selector *SEL; 我用 idaq 反汇编了我的 dylib ,我确实调用了 _MSHookMes
我正在尝试在 Mach 上的两个进程之间发送消息(准确地说,这是带有 Mach 微内核的 Debian GNU/Hurd),这是我的代码: #define _GNU_SOURCE #include
我对使用信号量感兴趣,它是使用 mach/semaphore.h 中的 semaphore_create(task, sem, policy, value) 创建的,在共享内存中用于在 Mac OS
我想在共享内存中使用匿名信号量来同步多个进程。 虽然多个 POSIX 操作系统提供匿名信号量(通过 sem_init 和相关函数),但 macOS 不支持它们。 我发现 Mach 信号量在 macOS
我正在尝试将 mach 端口传递给使用 fork 创建的子进程在 Mac OSX 上。我看到了这个问题 Sharing Mach ports with child processes但它没有解决方案,
构建应用程序时生成的 dsym 文件的结构是什么。我知道它包含 DWARF 调试信息,但什么是 dsym 文件。我想阅读其中的 DWARF 信息。 它只是一个只包含调试部分的 Mach-O 二进制文件
当 SOVERSION 的文档出现时,我正在考虑对一个小型个人项目的共享库进行版本控制。 target 属性提到在 OS X 和 iOS 等 Mach-O 系统上,对应的是“兼容版本”,而 VERSI
我正在尝试实现在项目中发现的openssl代码,但这些链接器错误并没有消失。我检查了框架是否正确链接,甚至使用../lib和../include手动包含了库和 header 搜索路径。尽管如此,当我摆
这个问题已经有答案了: Mach-O 64-bit format does not support 32-bit absolute addresses. NASM Accessing Array (1
我正在寻找有关如何设计 Mac OS X 网络内核扩展的特定部分以尽可能快速和高效的建议或指示 - C 语言。 描述:我有两套 TAILQ 列表。一个用于 A 型结构,另一个用于 B 型结构。大多数情
我有一个用 C++ 编写的服务器,它在 osx 上运行时会泄漏 Mach 端口。具体来说,运行时 top我注意到它有大约 50000(在 #PORTS 下)。奇怪的是,我让它运行了一夜,第二天机器基本
我修改了CoreData数据集,并向无错误的iPhone应用程序添加了两个新类。现在,当我尝试编译时,出现此错误: Apple Mach-OP Linker Error Linker command
我正在对 Mac OS X 上可用的不同 IPC 机制(管道、套接字、System V IPC 等)进行比较,我想看看 Mach 端口与更高级别的替代方案相比如何。但是,我遇到了一个非常基本的问题:跨
升级到Xcode 8.3.2后,尝试在设备上运行时,我收到了Apple Mach-O链接程序警告(它正在模拟器上运行)。但是我没有得到任何细节。双击该错误不会带来有关链接器警告的更多信息。有人可以帮忙
我有 2 张 table 。 表1 共有约 2700 行 列:ID、NO、NAME 表2: 共有约 300 行 列:ID、NAME 地点: Table1.NO = Table2.ID 我想列出 Tab
我在我的 iOS 应用程序中使用了一些第三方库(库有 flurry、chartboost 和burSTLy)。所有这些第三方库都有静态库,我通过将它们添加到“将二进制与库链接”中来将它们包含在我的项目
Undefined symbols for architecture x86_64: "_BFTaskMultipleExceptionsException", referenced from:
我正在尝试设置一条 mach 消息,以使用 mach IPC 发送越界的字符串。但是,在尝试发送越界消息时,我收到了 (ipc/send) invalid msg-header 错误。 这是消息结构。
为什么 SELECT * , MATCH(tags) AGAINST('php' IN BOOLEAN MODE) .. etc 不返回任何东西(而 php 标签存在于许多行中) 和 SELECT *
我是一名优秀的程序员,十分优秀!