Avatar of newpro2010
newpro2010
 asked on

C to C++ error message (Method does not take three arguments)

Here is a C code that I have tried to modify a bit in order to compile it in my C++ application.
When I compile I get this error message:

1>  All outputs are up-to-date.
1>AdvanceAdapter.obj : error LNK2019: unresolved external symbol __imp__getnameinfo@28 referenced in function "char * __cdecl ip6tos(struct sockaddr *,char *,int)" (?ip6tos@@YAPADPAUsockaddr@@PADH@Z)
1>...\Visual Studio 2010\Projects\Final\Debug\Final.exe : fatal error LNK1120: 1 unresolved externals
1>
1>Build FAILED.

I would appreciate any comment
((((AdvanceAdapter.cpp))))

#include "stdafx.h"
#include <pcap.h>
#include "AdvanceAdapter.h"

#include <stdio.h>



#ifndef WIN32
    #include <sys/socket.h>
    #include <netinet/in.h>
#else
    #include <winsock.h>
#endif

// Function prototypes
void ifprint(pcap_if_t *d);
char *iptos(u_long in);
char *ip6tos(struct sockaddr *sockaddr, char *address, int addrlen);

AdvanceAdapter::AdvanceAdapter()
	{
	}

AdvanceAdapter::~AdvanceAdapter()
	{
	} 
	
	int AdvanceAdapter::ObtainAdvanceInfo()
	{

    pcap_if_t *alldevs;
  pcap_if_t *d;
  char errbuf[PCAP_ERRBUF_SIZE+1];
  char source[PCAP_ERRBUF_SIZE+1];

  printf("Enter the device you want to list:\n"
            "rpcap://              ==> lists interfaces in the local machine\n"
            "rpcap://hostname:port ==> lists interfaces in a remote machine\n"
            "                          (rpcapd daemon must be up and running\n"
            "                           and it must accept 'null' authentication)\n"
            "file://foldername     ==> lists all pcap files in the give folder\n\n"
            "Enter your choice: ");

  fgets(source, PCAP_ERRBUF_SIZE, stdin);
  source[PCAP_ERRBUF_SIZE] = '\0';

  /* Retrieve the interfaces list */
  if (pcap_findalldevs_ex(source, NULL, &alldevs, errbuf) == -1)
  {
    fprintf(stderr,"Error in pcap_findalldevs: %s\n",errbuf);
    exit(1);
  }

  /* Scan the list printing every entry */
  for(d=alldevs;d;d=d->next)
  {
    ifprint(d);
  }

  pcap_freealldevs(alldevs);

  return 1;
}



/* Print all the available information on the given interface */
void ifprint(pcap_if_t *d)
{
  pcap_addr_t *a;
  char ip6str[128];

  /* Name */
  printf("%s\n",d->name);

  /* Description */
  if (d->description)
    printf("\tDescription: %s\n",d->description);

  /* Loopback Address*/
  printf("\tLoopback: %s\n",(d->flags & PCAP_IF_LOOPBACK)?"yes":"no");

  /* IP addresses */
  for(a=d->addresses;a;a=a->next) {
    printf("\tAddress Family: #%d\n",a->addr->sa_family);
  
    switch(a->addr->sa_family)
    {
      case AF_INET:
        printf("\tAddress Family Name: AF_INET\n");
        if (a->addr)
          printf("\tAddress: %s\n",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr));
        if (a->netmask)
          printf("\tNetmask: %s\n",iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr));
        if (a->broadaddr)
          printf("\tBroadcast Address: %s\n",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr));
        if (a->dstaddr)
          printf("\tDestination Address: %s\n",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr));
        break;

      case AF_INET6:
        printf("\tAddress Family Name: AF_INET6\n");
        if (a->addr)
          printf("\tAddress: %s\n", ip6tos(a->addr, ip6str, sizeof(ip6str)));
       break;

      default:
        printf("\tAddress Family Name: Unknown\n");
        break;
    }
  }
  printf("\n");
}



/* From tcptraceroute, convert a numeric IP address to a string */
#define IPTOSBUFFERS    12
char *iptos(u_long in)
{
    static char output[IPTOSBUFFERS][3*4+3+1];
    static short which;
    u_char *p;

    p = (u_char *)&in;
    which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);
    _snprintf_s(output[which], sizeof(output[which]), sizeof(output[which]),"%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
    return output[which];
}

char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen)
{
    socklen_t sockaddrlen;

    #ifdef WIN32
    sockaddrlen = sizeof(struct sockaddr_in6);
    #else
    sockaddrlen = sizeof(struct sockaddr_storage);
    #endif


    if(getnameinfo(sockaddr, 
        sockaddrlen, 
        address, 
        addrlen, 
        NULL, 
        0, 
        NI_NUMERICHOST) != 0) address = NULL;

    return address;
}
.......................................................................................
.......................................................................................

((((AdvanceAdapter.h))))

#include "stdafx.h"
#include <iostream>
#ifndef ADVANCEADAPTER_H
#define ADVANCEADAPTER_H

class AdvanceAdapter {

public:
	// Function prototypes
	AdvanceAdapter(); //Constructor
	~AdvanceAdapter();//destructor

	int ObtainAdvanceInfo(); //the function


};

#endif 

......................................................................................
......................................................................................

((((Final.cpp)))

#include "stdafx.h"
#include <iostream>
#include "Adapters.h"
#include "ListenToAdapter.h"
#include "AdvanceAdapter.h"


using namespace std;

Adapters *Adapt;
ListenToAdapter *List;
AdvanceAdapter *Obtain;



int main ()


{
	
	cout << "For checking the adapters available press 1 \n";
	cout << "For listening to a specific adapter please press the number of that adapter \n";
	
	int choice = 0;
	cin >> choice;

	switch (choice)
	{
	case 1:
		
	Adapt = new Adapters();

	
	Adapt->displayAdapters();
	
	delete Adapt;

	case 2:
		List = new ListenToAdapter();
		List->listen();
		delete List;

	case 3:

		Obtain = new AdvanceAdapter();
		Obtain->ObtainAdvanceInfo();
		delete Obtain;

	}
	
	

	
}

Open in new window

CVisual C++.NETC++

Avatar of undefined
Last Comment
newpro2010

8/22/2022 - Mon
ASKER CERTIFIED SOLUTION
Zoppo

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
SOLUTION
masheik

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
SOLUTION
Log in to continue reading
Log In
Sign up - Free for 7 days
Get an unlimited membership to EE for less than $4 a week.
Unlimited question asking, solutions, articles and more.
newpro2010

ASKER
I've requested that this question be deleted for the following reason:

I have solved the problem. I had to change the parameters
masheik

The same answers recommended by 3 experts.
sarabande

masheik is right. any of the three answers would have solved the original question.

so in my opinion the question should not be deleted and the answers should be honored.

Sara
Experts Exchange is like having an extremely knowledgeable team sitting and waiting for your call. Couldn't do my job half as well as I do without it!
James Murphy
masheik

It is supposed to be split between all of them masheik,sara,zoppo, because all of them giving different way to solve the problem
Zoppo

I agree ...
sarabande

as already told, any of the comments is a valid solution.

masheik's suggestion is the standard way and it should get points.

Sara
Get an unlimited membership to EE for less than $4 a week.
Unlimited question asking, solutions, articles and more.
newpro2010

ASKER
Good, I'm happy for that..
There was no option to re-award, so thank you :)