我尝试在osx lion上编译这个cpp代码,但是我收到了一个错误.
#include <iostream>
using namespace std;
int main (int argc, char *argv[])
{
for(int i = 0; i < 10; i++)
{
cout << "hi";
cout << endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译:
cc main.cpp
Run Code Online (Sandbox Code Playgroud)
错误:
Undefined symbols for architecture x86_64:
"std::cout", referenced from:
_main in ccBdbc76.o
"std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from:
_main in ccBdbc76.o
"std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)", referenced from:
_main in ccBdbc76.o
"std::basic_ostream<char, std::char_traits<char> >::operator<<(std::basic_ostream<char, std::char_traits<char> …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个高精度存储股票价格的应用程序.目前我正在使用双倍这样做.为了节省内存,我可以使用任何其他数据类型吗?我知道这与定点运算有关,但我无法弄明白.
我有一个*.cpp使用C ++编译的文件(不是C编译器)。包含函数依赖于强制转换(请参见最后一行),该强制转换似乎是在C中定义的(如果我错了,请更正!),但对于这种特殊类型,则不在C ++中定义。
[...] C++ code [...]
struct sockaddr_in sa = {0};
int sockfd = ...;
sa.sin_family = AF_INET;
sa.sin_port = htons(port);
bind(sockfd, (struct sockaddr *)&sa, sizeof sa);
[...] C++ code [...]
Run Code Online (Sandbox Code Playgroud)
由于我将其编译为C ++文件,因此这是现在定义的还是未定义的行为?还是我需要将其移动到*.c文件中以使其定义为行为?
我正在尝试低估如何在C++中使用结构作为列表.我提出了一段代码,对我来说,这不应该导致任何错误,但它确实......
我的代码是这样的:
struct item {
int data;
struct item *next;
};
struct item *begin = NULL;
void add(int x) {
struct item *a = new struct item();
a->data = x;
a->next = begin;
begin = a;
}
int main() {
add(2);
printf("%d\n", begin->data);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它给了我这个:
Undefined symbols for architecture x86_64:
"operator new(unsigned long)", referenced from:
add(int) in structtest-f49486.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see …Run Code Online (Sandbox Code Playgroud) 我有一个在头文件中声明的函数模板.该函数是一个归档程序,它应该支持通过项目实现的其他几种类型(类).我们的想法是拥有一个基本模板声明,然后每个类专门针对它自己的类型.
// Archiver.h
template <class T> void archive(Archiver & archiver, const T & obj);
Run Code Online (Sandbox Code Playgroud)
此方法没有实现.现在我创建一个类(比方说Header),我希望它可以存档.因此,我打算专门研究这种方法.这就是我现在拥有的:
// Header.h
extern template void archive(Archiver & archiver, const Header & obj);
Run Code Online (Sandbox Code Playgroud)
我声明该函数是extern因为我在.cpp文件中实现它
// Header.cpp
template <> void archive(Archiver & archiver, const Header & obj)
{
// Code here
}
Run Code Online (Sandbox Code Playgroud)
这给了specialization after instantiation.我也尝试过其他组合:
undefined reference从另一个编译单元调用该方法时得到那么实现这个是正确的呢?
编辑:
最初我决定使用模板,因为反向过程,unarchiving.基本上我可以写,unarchive<Header>()而不是unarchive_header()似乎更合适.
我相信我还应该提到我正在使用Android Studio和Gradle构建系统编译它,这就是为什么我使用gcc而不是g ++.我还给了gcc以下编译器标志:
-std=gnu++11 -fexceptions -fpermissive -lstdc++
Run Code Online (Sandbox Code Playgroud)
-fpermissive 是一种绝望的行为.